防抖和节流

防抖的目的:为了减少因函数的频繁调用而加重浏览器负担

防抖:在指定时间内,多次触发事件该事件只能被执行一次,指定时间过后可再次执行

       /*
         @param fn 函数
        */
        function debounce(fn) {
            let time = null;
            return function () {
                //清除前一个定时器
                clearTimeout(time);
                //创建新的定时器,使用apply修复this指向
                time = setTimeout(() => {
                    a.apply(this, arguments)
                }, 1000)
            }
        }
        function a() {
            let scrollTop = document.documentElement.scrollTop||document.body.scrollTop;
            console.log('top-->',scrollTop)
        }

        window.onscroll = debounce(a)

 节流:在指定时间内,只能触发一次事件,该时间过后可再次触发事件。

     /* 
       @param fn 函数
     */

function throttle(fn) { //记录是否在时间内 let time = true; return function () { if(!time) { return ; } time = false; setTimeout(() => { fn.apply(this,arguments); // 在setTimeout执行完毕后再把标记设置为true(关键)表示可以执行下一次循 环了。当定时器没有执行的时候标记永远是false,在开头被return掉 time = true; },1000) } } function a() { let scrollTop = document.documentElement.scrollTop||document.body.scrollTop; console.log('top-->',scrollTop) } window.onscroll = throttle(a)

 

总结:防抖是将多次执行变为执行一次,节流是将多次执行变成每隔一段时间执行(防抖是防止频率,节流是防止次数)

posted @ 2020-03-10 20:28  阿软妹  阅读(112)  评论(0编辑  收藏  举报