防抖节流

什么是防抖

函数防抖(debounce) 是指在一定时间内,在动作被连续频繁触发的情况下,动作只会被执行一次,也就是说当调用动作过n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间,所以短时间内的连续动作永远只会触发一次。

代码片段

// 防抖

let timeout;

function debounce(func, wait = 300, immediate = false) {

    // 清除定时器

    if (timeout !== null) clearTimeout(timeout);

    // 立即执行,此类情况一般用不到

    if (immediate) {

        var callNow = !timeout;

        timeout = setTimeout(function() {

            timeout = null;

        }, wait);

        if (callNow) typeof func === 'function' && func();

    } else {

        // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法

        timeout = setTimeout(function() {

            typeof func === 'function' && func();

        }, wait);

    }

}

什么是节流

函数节流(throttle) 是指一定时间内执行的操作只执行一次,也就是说即预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期。

// 节流

let timer, flag;

function throttle(func, wait = 300, immediate = true) {

    if (immediate) {

        if (!flag) {

            flag = true;

            // 如果是立即执行,则在wait毫秒内开始时执行

            typeof func === 'function' && func();

            timer = setTimeout(() => {

                flag = false;

            }, wait);

        }

    } else {

        if (!flag) {

            flag = true

                // 如果是非立即执行,则在wait毫秒内的结束处执行

            timer = setTimeout(() => {

                flag = false

                typeof func === 'function' && func();

            }, wait);

        }

    }

};

 在项目中我们什么时候用到了防抖

当我们进行下拉过多的时候我们使用了防抖

 在vue中我们如何下拉加载更多

1.我们可以写一个方法,在这个方法中,我们可以监听页面的滚动高度

2.如过页面的可视高度+页面的滚动高度>页面的总高度的

   其实他的意思就相当于我们小程序中的触底函数,小程序中是写好的

3.在vue中我们需要通过节流来实现

4.我们可以获取页面的总条数

5.我们可以通过总条数/每页的条数然后向上取值得到我们的总页数

6.如果当前页面数小于总页面就让他的页数进行加1

7.否则的话就显示数据已经加载完毕

8.mouted中调用这个函数

使用防抖的好处

优化性能

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容