vue如何監(jiān)聽頁面的滾動的開始和結(jié)束
監(jiān)聽頁面的滾動的開始和結(jié)束
export default {
data() {
return {
oldScrollTop: 0, //記錄上一次滾動結(jié)束后的滾動距離
scrollTop: 0 // 記錄當(dāng)前的滾動距離
}
},
watch: {
scrollTop(newValue, oldValue) {
setTimeout(() => {
if(newValue == window.scrollY) { //延時執(zhí)行后當(dāng)newValue等于window.scrollY,代表滾動結(jié)束
console.log('滾動結(jié)束');
this.oldScrollTop = newValue; //每次滾動結(jié)束后都要給oldScrollTop賦值
};
}, 20); //必須使用延時器,否則每次newValue和window.scrollY都相等,無法判斷,20ms剛好大于watch的偵聽周期,故延時20ms
if(this.oldScrollTop == oldValue) { //每次滾動開始時oldScrollTop與oldValue相等
console.log('滾動開始');
}
}
},
methods: {
handleScroll() {
window.addEventListener('scroll', () => {
this.scrollTop = window.scrollY;
})
}
},
mounted() {
this.handleScroll();
},
beforeDestroy() {
window.removeEventListener('scroll'); //離開當(dāng)前組件別忘記移除事件監(jiān)聽哦
}
}vue監(jiān)聽頁面滾動事件
方法:監(jiān)聽滾動實現(xiàn)
通過addEventListener方式監(jiān)聽
通過scroll獲取到滾動
export default {
?? ?data () {
?? ??? ?return {
?? ??? ??? ?topNavBg: {
? ? ? ? ?? ??? ?backgroundColor: ''
? ? ? ?? ??? ?}
?? ??? ?}
?? ?},
?? ?// 滾動監(jiān)聽
?? ?mounted () {
? ? ?? ?window.addEventListener('scroll', this.handleScroll) // 監(jiān)聽頁面滾動
? ? },
? ? methods: {
?? ??? ?// 獲取頁面滾動距離
?? ? ? ?handleScroll () {
?? ? ? ? ? ?let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
?? ? ? ? ? ?console.log(scrollTop, '滾動距離')
?? ? ? ?}
?? ?},
?? ?// 滾動重置
? ? ?? ?beforeDestroy () {
? ? ? ?? ??? ?window.removeEventListener('scroll', this.handleScroll)
? ? ?? ?},
}問題:監(jiān)聽不到頁面的滾動
現(xiàn)象:上述方法不可用,handleScroll只觸發(fā)一次,且scrollTop為0
原因:html,body的height設(shè)置有問題,因為限制了根元素高度,故而無法監(jiān)聽到滾動
// oldCode: 原代碼css中
body,html {
? width: 100%;
? height: 100vh; /或者 height: 100%
}
// newCode:新代碼改為
body,html {
? width: 100%;
? min-height: 100vh; /或者 min-height: 100% ; 不需要也可以去除
}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于vue中ref的使用(this.$refs獲取為undefined)
這篇文章主要介紹了關(guān)于vue中ref的使用(this.$refs獲取為undefined),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Vue組件更新數(shù)據(jù)v-model不生效的解決
這篇文章主要介紹了Vue組件更新數(shù)據(jù)v-model不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04
vue使用require.context實現(xiàn)動態(tài)注冊路由
這篇文章主要介紹了vue使用require.context實現(xiàn)動態(tài)注冊路由的方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-12-12
vue-cli3項目生產(chǎn)和測試環(huán)境分包后文件名和數(shù)量不一致解決
這篇文章主要為大家介紹了vue-cli3項目生產(chǎn)和測試環(huán)境分包后文件名和數(shù)量不一致解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
詳解webpack + vue + node 打造單頁面(入門篇)
本篇文章主要介紹了詳解webpack + vue + node 打造單頁面(入門篇) ,非常具有實用價值,需要的朋友可以參考下2017-09-09
在vue中獲取微信支付code及code被占用問題的解決方法
這篇文章主要介紹了在vue中獲取微信支付code及code被占用問題的解決方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04
詳解vue結(jié)合el-table實現(xiàn)表格小計總計需求(summary-method)
這篇文章主要介紹了vue結(jié)合el-table實現(xiàn)表格小計總計需求(summary-method),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01

