22/09/26 vue3,页面监听scroll&移除scroll

坑1:vue是单页面应用,页面上window.addEventListener,scroll事件后,每个页面都能够监听到scroll事件
坑2:
直接移除监听事件,一直不能成功移除,需要先将函数单独声明出来,后续才能移除


代码,为了性能优化,使用了防抖函数

import { ref, onBeforeMount, computed, reactive, watch, nextTick, onUnmounted, onMounted } from "vue";
//监听滚动事件 
onMounted(() => {
    window.addEventListener("scroll", debounceLoad, false);
})

//声明函数,方便移除监听
//这里多用防抖函数嵌套了一下,自己不需要的话,可以写在一起
const debounceLoad = debounce(onScrollFunc);

//滚动高度赋值
const onScrollFunc = () => {
    pageScrollY.value = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
    console.log('触发滚动pageScrollY', pageScrollY.value);
}

//防抖 滚动结束执行
function debounce(fn, interval = 500) {
    let timeout = null;

    return function () {
        clearTimeout(timeout);
        timeout = setTimeout(() => {
            fn.apply(this, arguments);
        }, interval);
    };
}

//移除监听 组件实例被卸载后调用
onUnmounted(() => {
    // console.log('onUnmounted');
    window.removeEventListener('scroll', debounceLoad, false);
});

参考链接:
防抖函数参考网上的资源,找不到链接了
项目中关于监听和移除scroll的坑

可能用到
vue项目中对于Scroll事件的节流优化(写法vue2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值