防抖和节流

Posted lyralee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防抖和节流相关的知识,希望对你有一定的参考价值。

1.防抖

防抖是只在时间间隔wati内,不触发事件才执行。

原理: 设置一个定时器和最小间隔时间,如果用户触发在时间间隔内,就清空定时器,重新计时;否则在wait时间后执行函数。

分类: 防抖函数有两种,一种是第一次触发执行回调函数;一种是第一次触发不执行回调函数。

应用: 在某个动作(鼠标滚动,键盘输入)等结束后调用回调函数。

技术图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div id="content" style="height:850px;line-height:150px;text-align:center; color: #fff;background-color:#ccc;font-size:80px;"></div>
    <script>
        let num = 1;
        let content = document.getElementById(‘content‘);

        function count() {
            content.innerHTML = num++;
        };
        content.onmousemove = debounce(count, 2000, true);
        function debounce(func, wait, immediate) { // 第三个参数表示第一次触发是否执行
            let timer = null;
            return function() {
                const args = [].slice.call(arguments);
                const _this = this;
                if (timer) {
                    clearTimeout(timer);
                }    
                if (immediate) { 
                    let callNow = !timer;
                    if (callNow) { // 第一次
                        func.apply(_this, args);
                    }
                }
                timer = setTimeout(function() { // 回调函数可以改为箭头函数;就不需要将_this传入
                    func.apply(_this, args);
                    timer = null; // 下个周期的第一次
                }, wait)
            }
        }
    </script>
</body>
</html>
View Code

2.节流

以上是关于防抖和节流的主要内容,如果未能解决你的问题,请参考以下文章

lodash的防抖和节流方法

JS基础-防抖和节流

防抖和节流代码实现

防抖和节流代码实现

JS的防抖和节流

防抖和节流啥区别,实现一个防抖和节流