js 节流和防抖

节流与防抖

在JavaScript中,频繁的触发事件会对DOM处理造成性能消耗,会加重浏览器的负担,降低用户体验。所以,我们可以采用函数防抖(debounce)和函数节流(throttle)的方式来减少调用频率,对实际效果也不会有太大影响。

函数防抖 (debounce)

短时间内多次触发同一事件,会重新开始计时,知道等待时长到达后执行。触发事件后等待一段时间后执行,如果等待时再次触发事件,将会重新进入等待时间。

// 函数防抖
        function debounce(){
            var timer = null;
            // console.log(arguments);
            var hanlder = arguments[0];

            // return function(){
                // this ->  ipt
                // console.log(this);
                var that = this;
                clearTimeout(timer);
                timer = setTimeout(function(){

                    // 累加  return  对数组求和
                    // console.log(ipt.value);

                    hanlder.call(that);
                },500);
            // }
        }

函数节流(debounce)

一个事件的触发 一段时间内只触发一次,函数节流主要有两种实现方法:时间戳和定时器。

<body>
    <div id="show">0</div>
    <button>增加</button>
    <script>
        // 获取元素
        var show = document.getElementById('show');
        var btn = document.getElementsByTagName('button')[0];

        // 用定时器实现函数节流,一个事件的触发 一段时间内只触发一次
        // 点击后延迟一秒触发
        // var timer = null;
        // btn.onclick = function() {

        //     if (timer) {
        //         return
        //     }
        //     timer = setTimeout(function() {
        //         show.innerHTML = (+show.innerHTML) + 1;
        //         timer = null;
        //     }, 1000)

        // }

		// 用定时器实现函数节流
        // 点击后立即执行
        // 事件戳:记录每一次点击的时间  下一次与上一次进行比较 差值 <1000
        var lastTime = 0;
        btn.onclick = function() {
            var sum;
            // 得到点击当前时间
            var nowTime = new Date();
            if (nowTime - lastTime >= 1000) {
                show.innerHTML = (+show.innerHTML) + 1;
                lastTime = nowTime;
            }
        }
    </script>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值