vue之監(jiān)聽頁(yè)面是否以到底部
vue監(jiān)聽頁(yè)面是否以到底部
項(xiàng)目中經(jīng)常用到上拉加載數(shù)據(jù)列表,平時(shí)使用組件庫(kù)可以快速的實(shí)現(xiàn),整理一下原生寫法
思路
距離頂部的距離+ 可視區(qū)域高度 == 滾動(dòng)條高度 如果成立說(shuō)明已經(jīng)到頁(yè)面底部
獲取距離頂部的距離:
var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;
獲取可視區(qū)域高度:
var windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
獲取滾動(dòng)條高度:
var scrollHeight = document.documentElement.scrollHeight||document.body.scrollHeight;
注意:在vue的created鉤子中使用
window.onscroll = function(){…}:觸發(fā)監(jiān)聽的函數(shù)
created(){ window.onscroll = function(){ var scrollTop = document.documentElement.scrollTop||document.body.scrollTop; var windowHeight = document.documentElement.clientHeight || document.body.clientHeight; var scrollHeight = document.documentElement.scrollHeight||document.body.scrollHeight; if(scrollTop+windowHeight==scrollHeight){ //寫后臺(tái)加載數(shù)據(jù)的函數(shù) console.log("距頂部"+scrollTop+"可視區(qū)高度"+windowHeight+"滾動(dòng)條總高度"+scrollHeight); } } }
scroll滾動(dòng)事件如何監(jiān)聽頁(yè)面是否滾動(dòng)到底部
監(jiān)聽是否滾動(dòng)到底部多數(shù)應(yīng)用在加載更多之類的功能。話不多說(shuō),直接上菜。
考慮vue渲染規(guī)則 需要在元素渲染后執(zhí)行scroll監(jiān)聽 否則獲取不到對(duì)應(yīng)dom節(jié)點(diǎn)
所以需要配合使用 $nextTick()
cont是監(jiān)聽區(qū)域,‘scroll’是添加事件,this.scroll是方法,div綁定ref="cont"。
mounted() { this.$nextTick(()=>{ this.$refs.cont.addEventListener('scroll',this.scroll) }) }
scroll判斷是否到底部,如果到底了就可以請(qǐng)求數(shù)據(jù)或者其它操作。
scroll(e) { let scrollTop = e.target.scrollTop; //滑入屏幕滾動(dòng)條滾動(dòng)時(shí),距離頂部的距離 let windowHeitht = e.target.clientHeight; //能看到的頁(yè)面的高度 let scrollHeight = e.target.scrollHeight; //監(jiān)控的整個(gè)div的高度(包括現(xiàn)在看到的和上下隱藏起來(lái)看不到的) let total = scrollTop + windowHeitht if(total == scrollHeight){ console.log("到底了") //加載操作 }else { console.log("還沒有到底") } }
如果沒有要加載數(shù)據(jù)了,就可以把scroll事件移除了,以免浪費(fèi)性能。
this.$refs.cont.removeEventListener('scroll',this.scroll)
注意:
一定給滾動(dòng)的區(qū)域加高度和超出部分為滾動(dòng),不然不會(huì)觸發(fā)事件。
滾動(dòng)區(qū)域class= "cont"。
.cont { overflow: scroll; width: 100%; height: 677px; }
這就是事件監(jiān)聽是否滾動(dòng)到底部的全部?jī)?nèi)容了,其實(shí)并不難。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
簡(jiǎn)單說(shuō)說(shuō)如何使用vue-router插件的方法
這篇文章主要介紹了如何使用vue-router插件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04詳解如何實(shí)現(xiàn)在Vue中導(dǎo)入Excel文件
這篇文章主要介紹了如何在Vue中導(dǎo)入Excel文件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-01-01Vue3通過(guò)JSON渲染ElementPlus表單的流程步驟
這篇文章主要介紹了Vue3通過(guò)JSON渲染ElementPlus表單的流程步驟,文中通過(guò)代碼示例和圖文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-10-10使用element-ui實(shí)現(xiàn)行合并過(guò)程
這篇文章主要介紹了使用element-ui實(shí)現(xiàn)行合并過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08cordova+vue+webapp使用html5獲取地理位置的方法
這篇文章主要介紹了2019-07-07vue中多個(gè)文件下載實(shí)現(xiàn)打包壓縮下載示例
這篇文章主要為大家介紹了vue中多個(gè)文件下載實(shí)現(xiàn)打包壓縮下載的發(fā)發(fā)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07