js 滚动监听,核心方法

文章详细介绍了在Vue组件中如何使用`mounted`和`destroyed`生命周期钩子进行滚动事件的添加和移除,并提供了一个核心方法`handleScroll`来处理滚动监听,当滚动到距离底部特定距离时触发回调函数。回调函数接收滚动条的相关数据,如偏移量、窗口高度等。

vue使用

export default {
data:{},
//挂在完成
mounted () { 
    window.addEventListener('scroll', function); 
  },
//销毁
destroyed () {
    window.removeEventListener("scroll", function, true);
  },
}

一、开始滚动监听

  window.addEventListener('scroll', function);

二、关闭滚动监听

window.removeEventListener("scroll", function, true);

三、滚动监听核心方法

3.1先开启监听

window.addEventListener('scroll', function(){
                handleScroll({
                    distance:10,//距离底部多少开始加载
                    IsDisabled:false,//是否停止
                    CallBackFun:function(res){
                        console.log('回调=============',res);
                    },//回调方法
                });
            });

3.2监听核心方法

//该方法是以浏览器窗口和body容器窗口的滚动条为依据计算执行的
handleScroll (obj) {
if(typeof(obj)!='object')
{
    obj={
            distance:10,//距离底部多少开始加载
            IsDisabled:false,//是否停止
            CallBackFun:null,//回调方法
        };
} 
//距离
if(typeof(obj.distance)!='number')
{
    obj.distance=10;
}
//停止
if(typeof(obj.IsDisabled)!='boolean')
{
    obj.IsDisabled=false;
}
//回调
if(typeof(obj.CallBackFun)!='function')
{
    obj.CallBackFun=null;
}  
// console.log('参数对象obj==',typeof(obj),obj);
// console.log('距离obj.distance==',typeof(obj.distance),obj.distance);
// console.log('停止obj.IsDisabled==',typeof(obj.IsDisabled),obj.IsDisabled);
// console.log('回调obj.CallBackFun==',typeof(obj.CallBackFun),obj.CallBackFun);

//变量scrollTop是滚动条滚动时,距离顶部的距离
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
//变量windowHeight是可视区的高度
var windowHeight = document.documentElement.clientHeight || document.body.clientHeight;
//变量scrollHeight是滚动条的总高度
var scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
// 滚动条偏移量 
let offset = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; 
// console.warn('滚动条距离顶部的距离scrollTop==',scrollTop);
// console.log('窗口可视区的高度windowHeight==',windowHeight);
// console.log('滚动条的总高度scrollHeight==',scrollHeight);
// console.log('滚动条偏移量offset==',offset);

//计算底部距离 
var _dis=(scrollTop + windowHeight); 
//滚动条到底部的条件
if ( _dis==scrollHeight) {
    console.error('滚动高度+窗口高度='+scrollTop + windowHeight);
    if(typeof(obj.CallBackFun)=='function'&&obj.IsDisabled==false)
    {
        var resObj={
        scrollTop,
        windowHeight,
        scrollHeight,
        offset,
        _dis
        }
        return obj.CallBackFun(resObj);
    }
}
},

四、回调反参数说明

offset: 691 //滚动条偏移量 
scrollHeight: 1600 //变量scrollHeight是滚动条的总高度
scrollTop: 691 //变量scrollTop是滚动条滚动时,距离顶部的距离
windowHeight: 909 //变量windowHeight是可视区的高度
_dis: 1600 //底部距离 

五、截图测试图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙-极纪元JJYCheng

客官,1分钱也是爱,给个赏钱吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值