vue中判斷頁面滾動開始和結束


 
需求:  頁面滾動 隱藏某元素, 頁面停止滾動再顯示
 
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('滾動結束了')
   }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM