函数的防抖和节流

防抖和节流

在前端开发中有一部分的用户行为会频繁的触发事件执行,而对DOM操作,资源加载等耗费性能的处理,很卡能导致页面卡顿,甚至浏览器崩溃。函数的防抖和节流因此诞生。
防抖
函数防抖就是在函数需要频繁触发的情况时,只有足够的空闲时间,才执行一次、好像公交车司机会等所有人上车了之后再出站一样
运用场景:实时搜素和拖拽

// 函数的防抖
    var oInp = document.getElementById('inp');
    function debonce(handler,delay) { //handler 对哪个函数进行防抖,delay 延迟多少秒执行
        var timer = null;   
        return function () {
            var _self = this,_arg = arguments;
            clearTimeout(timer); // 每次触发时先清除上一次的定时器,然后重新计时
            timer = setTimeout(function () {  // 指定 xx ms 后触发真正想进行的操作 handler
                handler.apply(_self,_arg)
            },delay)
        }
    }
    function ajax(e) {
        console.log(e,this.value)
    }
    oInp.oninput = debonce(ajax,1000)

节流
函数节流就是预定一个函数只有在大于等于执行周期时才执行,周期内调用不执行。就好像水滴要攒到一定的重量才会落下。
场景:窗口调整(resize),页面滚动(scroll),抢购疯狂点击(mousedown)

<body>
    <style>
        div{
            width: 50px;
            height: 50px;
            background-color: yellow;
            border: 2px solid black;
        }
    </style>
    <div id = 'show'>0</div>
    <div id="btn">按钮</div>
    <script>
        var oDiv = document.getElementById('show');
        var oBtn = document.getElementById('btn');
        // 第一次点击能成功触发,在一秒之内不管怎么点都不会触发
        function throttle(handler,wait) {
            var startTime = 0;
            return function () {
                let curTime = new Date().getTime();
                if (curTime - startTime > wait) {
                    handler.apply(this,arguments);
                    startTime = curTime;
                }
            }
        }
        function buy() {
            oDiv.innerText = parseInt(oDiv.innerText) + 1;
        }
        oBtn.onclick = throttle(buy,1000);
    </script>
</body>

总结前端函数防抖与函数节流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值