js(防抖和节流)

debounce 防抖

应用场景

  1. 搜索框搜索输入,只需用户最后一次输入完再发送请求
  2. 手机号、邮箱验证输入检测
  3. 窗口大小 resize,只需窗口调整完成后,计算窗口大小,防止重复渲染

言外之意就是防止事件一直触发执行;

<body>
    <div class="box"></div>

    <script>
        // 获取 盒子 
        var box = document.querySelector('.box')

        // 防抖
        function debounce(fn, wait) {
            //定义一个定时器
            var timer = null      
            return function () {
                if (timer !== null) {
                    //清除这个定时器
                    clearTimeout(timer)
                }
                timer = setTimeout(fn, wait)
            }
        }

        // 滚动事件
        box.addEventListener('scroll', debounce(scTop, 1000))

        // 处理函数
        function scTop() {
            console.log(box.scrollTop)
        }
    </script>
</body>

throttle 节流:

应用场景
1.滚动加载,加载更多或滚到底部监听
2.搜索框,搜索联想功能

言外之意就是防止事件一直触发执行;
指的是当持续触发事件时,每隔一定的时间,只执行一次函数,我自己理解为匀速执行

<script>
    // 获取 盒子 
    var box = document.querySelector('.box')

    // 节流
    function throttle(func, delay) {
        // 定义计时器
        var timer = null
        return function () {
            var args = arguments
            if (!timer) {
                timer = setTimeout(function () {
                    func.apply(this, args)
                    timer = null
                }, delay)
            }
        }
    }

    // 滚动事件
    box.addEventListener('scroll', throttle(scTop, 1000))

    // 处理函数
    function scTop() {
        console.log(box.scrollTop)
    }
</script>

防抖和节流相同点:

  • 都可以通过 setTimeout 实现
  • 都是降低执行频率,节省计算资源

防抖和节流不同点:
debounce 防抖是在一段连续操作结束后,执行函数,利用 setTimeout 和 clearTimeout 实现,throttle 节流是在一段连续操作中,每隔一段时间只执行一次,频率较高的事件中使用,用来提高性能。
debounce 防抖关注一定时间连续触发的事件,只在最后执行一次,而 throttle 节流一段时间内只执行一次

上一篇:activemq的安装


下一篇:debounce函数的相关实例分析(实现防抖动)