一起手写吧!防抖和节流(未完成)

在进行窗口的resize、scroll,输入框内容校验等操作时。如果事件处理函数调用的频率无限制,浏览器的负担会很大,形成卡顿等问题,用户体验会非常糟糕。

此时我们可以采用debounce(防抖)和throttle(节流)的方式来减少调用频率,同时又不影响实际效果!

马上来学习吧!

防抖

函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。
如下图,持续触发scroll事件时,并不执行handle函数,当1000毫秒内没有触发scroll事件时,才会延时触发scroll事件。

一起来实现个简单的debounce~

防抖debounce代码:

    function debounce(fn, wait) {
        var timeout = null;
        return function () {
            if (timeout !== null)
                clearTimeout(timeout);
            timeout = setTimeout(fn, wait);
        }
    }
    // 处理函数
    function handle() {
        console.log(Math.random());
    }
    // 滚动事件
    window.addEventListener('scroll', debounce(handle, 1000));

当持续触发scroll事件时,事件处理函数handle只在停止滚动1000毫秒之后才会调用一次,也就是说在持续触发scroll事件的过程中,事件处理函数handle一直没有执行。

猜你喜欢

转载自www.cnblogs.com/magicg/p/12657349.html
今日推荐