防抖和节流最简单的写法,简单易懂,注释清晰!

1.所谓节流就是事件在n秒内连续被触发多次,函数只执行一次。

2.所谓防抖就是事件被触发,n秒后执行一次函数,如果n秒内再次被触发,就重新计算时间。

3.废话不多说先上代码。

<div></div>
    <script>
        let num = 1;
        let div = document.getElementsByTagName("div")[0];

        function numChange() {
            div.innerHTML = num++;
        }
        // 所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
        function debounce(callback, time) {
            let timer;
            return function () {
                let context = this;
                let args = arguments;

                if (timer) {
                    clearTimeout(timer);
                }


                timer = setTimeout(() => {
                    callback.apply(context, args)
                }, time);
            }
        }
        // 所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。
        function throttle(callback, time) {
            let timer;
            return function () {
                let context = this;
                let args = arguments;
                if (!timer) {
                    timer = setTimeout(() => {
                        timer = null;
                        callback.apply(context, args)
                    }, time)
                }

            }
        }
        // 调用方法
        // 鼠标动的越快,事件触发的频率越高
        // div.onmousemove = numChange;
        // 事件触发了n秒后,函数执行一次,n秒内事件再次被触发,时间将会重新计算
        // div.onmousemove = debounce(numChange, 100);
        // 在n秒内连续触发事件,只执行一次
        div.onmousemove = throttle(numChange, 1000);
    </script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值