防抖节流(先后)

本文详细介绍了JavaScript中的防抖(debounce)和节流(throttle)技术,包括它们的区别、实现方式以及在实际开发中的应用,如百度搜索框的防抖效果和窗口大小改变、滚动事件的节流处理。通过设置`immediate`参数,可以控制函数是在事件开始时立即执行还是在事件停止后执行。这些优化技巧能够有效提高页面性能,减少不必要的计算和调用。

防抖(先后) immediate为true(先执行) false(后执行)

  • 应用场景 百度搜索框 搜索防抖
	 function debounce(func, wait, immediate) {
        let timeout;
        return function () {
            if (timeout) clearTimeout(timeout);
            if (immediate) {
                const callNow = !timeout;
                timeout = setTimeout(function () {
                    timeout = null;
                }, wait)
                if (callNow) func.apply(this, arguments)
            } else {
                timeout = setTimeout(function () {
                    func.apply(this, arguments)
                }, wait);
            }
        }
    }

节流(先后) immediate为true(先执行) false(后执行)

  • 应用场景 resize窗口大小变化事件和滚动条滑动事件做个时间的间隔触发
 function throttle(func, wait, immediate) {
        let timeout;
        debugger
        return function () {
            debugger
            if (!timeout) {
                if (immediate) {
                    func.apply(this, arguments)
                    timeout = setTimeout(function () {
                        timeout = null;
                    }, wait)
                } else {
                    timeout = setTimeout(function () {
                        timeout = null;
                        func.apply(this, arguments)
                    }, wait)
                }


            }

        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值