标签搜索

防抖与节流

sunshine
2024-07-03 / 0 评论 / 51 阅读
温馨提示:
本文最后更新于2024年08月27日,已超过144天没有更新,若内容或图片失效,请留言反馈。

防抖与节流的区别:

虽然防抖和节流都是优化高频率事件的方法,但它们有不同的侧重点:

防抖(Debouncing):在特定时间内只执行一次函数,时间段内的重复调用会重新计时。适用于搜索输入、窗口调整大小等事件。

节流(Throttling):限制函数在特定时间内执行的次数。适用于滚动事件、鼠标移动等。

<script>
    function debounce(func, wait) {
        let timeout;

        return function (...args) {
            const context = this;

            clearTimeout(timeout);

            timeout = setTimeout(() => {
                func.apply(context, args);
            }, wait);
        };
    }

    // 定义需要防抖的函数
    function handleResize() {
        console.log('Window resized');
    }

    // 创建防抖函数,设置等待时间为 300 毫秒
    const debouncedResize = debounce(handleResize, 300);

    // 添加事件监听器
    window.addEventListener('resize', debouncedResize);


    // 定义需要防抖的函数
    function handleInput(event) {
        console.log('Input value:', event.target.value);
    }

    // 创建防抖函数,设置等待时间为 500 毫秒
    const debouncedInput = debounce(handleInput, 500);

    // 添加事件监听器
    // const inputElement = document.querySelector('input');
    // inputElement.addEventListener('input', debouncedInput);

    // 节流函数实现
    function throttle(func, wait) {
        let timeout;
        let lastRun = 0;

        return function (...args) {
            const context = this;
            const now = Date.now();

            if (now - lastRun >= wait) {
                lastRun = now;
                func.apply(context, args);
            } else {
                clearTimeout(timeout);
                timeout = setTimeout(() => {
                    lastRun = Date.now();
                    func.apply(context, args);
                }, wait - (now - lastRun));
            }
        };
    }

    // 节流函数使用示例

    // 定义需要节流的函数
    function handleScroll() {
        console.log('Scrolled');
    }

    // 创建节流函数,设置等待时间为 200 毫秒
    const throttledScroll = throttle(handleScroll, 200);

    // 添加事件监听器
    window.addEventListener('scroll', throttledScroll);


</script>
感觉很棒,欢迎点赞 OR 打赏~
1
分享到:

评论 (0)

取消