解决抖动之函数防抖

函数的抖动:简单来说就是一个函数在短时间内大量频繁调用,但是很多次调用都不是必须的
在js中,哪些情况容易遇到抖动?

到底哪些事件会频繁调用?

鼠标移动事件

移入移出事件

input输入事件

滚动条滚动事件(onscroll)

尺寸改变事件(onresize)

而很多次函数其实没必要调用,他都是无效执行,所以要想办法解决;

解决抖动之防抖
防抖:就是防止函数内的代码在短时间内大量执行,只让它最终执行一次

步骤:

把要执行的代码包到setTimeout里

在短时间内大量调用函数的时候,先把上一次的计时器清掉,再开一个新的,这样就能保证短时间内大量调用函数时,代码不会被执行(因为在不断的刷新计时器)

只有当你停下来一段时间,计时器才会执行


let timerID = null;

        document.body.onscroll = function () {

            clearTimeout(timerID)

            // 把要执行的代码打包到计时器里

            timerID = setTimeout(() => {

                console.log('滚动了');

            }, 300); //0.5秒

        }

封装成函数
function fangdou(callback, time) {

            //因为这个函数内部需要用到timerID,所以应该吧timerID

            //声明就写到函数内部,所以写成了闭包

            let timerID = null;

            return function () {

                clearTimeout(timerID)

                // 把要执行的代码打包到计时器里

                timerID = setTimeout(callback, time); //time时间后调用callback函数

            }

        }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值