防抖和节流

2021-04-01  本文已影响0人  WWWWWWWWWWWWWWM

防抖和节流都是解决用户频繁操作的一种解决方案,区别是:

debounce 防抖

用户在频繁操作的时候,只有当用户操作结束之后,才触发需要执行的方法(比如设置5s的防抖,意思就是在5s内,不管用户操作了多少次,都不会执行,只有当用户停止操作,5s之后才执行1次);

throttle 节流

是用户在频繁操作的时候,用户的操作频率太快,通过设置节流,让用户操作执行的方法频率降低(比如用户设置了5s的节流,用户现在1s中操作一次,那用户第一秒第二秒,第三秒,第四秒的操作都不会执行方法,只有第五秒才会执行)

debounce 防抖

//代码
function debounce(fn, t) {
    let timer;
    return function () {
        if (timer) {
            clearTimeout(timer);
        }
        timer=  setTimeout(() => {
            fn.apply(this, arguments)
        }, t)
    }
}
//应用(此代码意思是在1s内无论点击多少次btn,都不会打印,直至停止后1s)
<button id="btn">click</button>   //html
//js
    let btn = document.getElementById('btn');
    btn.onclick = debounce(function() {
        console.log(111)
    }, 1000)

throttle 节流

//代码
function throttle(fn, t) {
        let t1 = new Date().getTime();
        return function() {
            let t2 = new Date().getTime();
            // console.log(t2, t1)
            if ((t2 - t1) >= t) {
                fn.apply(this,arguments);
                t1 = t2;
            }
        }
}
//应用(此代码是监听scroll滚动,原先是滚动多次执行,现在是滚动1s中执行一次)
window.addEventListener('scroll', throttle(function () {
    console.log(123)
}, 1000))


上一篇 下一篇

猜你喜欢

热点阅读