參考鏈接:https://www.jianshu.com/p/adad39705ced 和 https://blog.csdn.net/weixin_44309374/article/details/103354020
需求: 頁面滾動 隱藏某元素, 頁面停止滾動再顯示
1. 方法一:利用vue中的watch(偵聽器)實現了這一功能,今天就以垂直滾動為例,分享一下實現方法。代碼如下:
export default {
data() {
return {
oldScrollTop: 0, //記錄上一次滾動結束后的滾動距離
scrollTop: 0 // 記錄當前的滾動距離
}
},
watch: {
scrollTop(newValue, oldValue) {
setTimeout(() => {
if(newValue == window.scrollY) { //延時執行后當newValue等於window.scrollY,代表滾動結束
console.log('滾動結束');
this.oldScrollTop = newValue; //每次滾動結束后都要給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'); //離開當前組件別忘記移除事件監聽哦
}
}
2. 方法二:原生js 判斷滾動結束代碼如下:
let m1 = 0; // 滾動的值
let m2 = 0; // 對比時間的值
let timer = null;
document.onscroll = function(){
clearTimeout(timer) // 每次滾動前 清除一次
timer = setTimeout("Data()", 1000);
m1 = document.documentElement.scrollTop || document.body.scrollTop;
}
function Data(){
m2 = document.documentElement.scrollTop || document.body.scrollTop;
if(m2 == m1){
console.log('滾動結束了')
}
}