节流函数和防抖函数的区别和应用

简介: 节流函数和防抖函数的区别和应用

函数节流

一个函数执行一次后,只有大于设定的执行周期才会执行第二次。

function throttle(func, ms = 1000) {
    //标记是否可以执行
    let canRun = true;
    return function (...args) {
        //不可执行
        if (!canRun) return;
        //执行后设置不可执行
        canRun = false;
        //设置执行周期
        setTimeout(() => {
            func.apply(this, args);
            //重置标记
            canRun = true;
        }, ms);
    }
}

测试 :

const task = () => { console.log('run task') };
const throttleTask = throttle(task, 1000);
//鼠标连续点击,在设置的执行周期内只会触发一次
window.addEventListener('click', throttleTask);

应用:

  • 滚动加载,加载更多或滚动到底部监听
  • 搜索框,搜索联想功能
  • 高频点击提交,表单重复提交

函数防抖

一个需要频繁触发的函数 在规定事件内 只让最后一次生效 前面的不生效

function debounce(func, ms = 1000) {
    //定时器ID
    let timer;
    return function (...args) {
        //清除定时器
        if (timer) {
            clearTimeout(timer);
        }
        //设置函数执行时间
        timer = setTimeout(() => {
          func.apply(this, args);
        }, ms);
    }
}

测试 :

const task = () => { console.log('run task') };
const debounceTask = debounce(task, 1000);
//鼠标连续点击,只会触发最后一次
window.addEventListener('click', debounceTask);

应用 :

  • 手机号、邮箱正则输入检测
  • 搜索框输入:用户最后一次输入完,再发送请求
  • 窗口大小:窗口调整完成后,计算窗口大小,防止重复渲染
目录
相关文章
|
1月前
|
JavaScript 前端开发
ES6防抖及节流的方法
ES6防抖及节流的方法
18 2
|
7月前
|
前端开发
封装防抖函数和节流函数
封装防抖函数和节流函数
37 0
|
2月前
|
UED
函数防抖
在频繁触发的情况下,只有足够的空闲时间,才执行代码一次,如果没有执行完就清除掉,重新执行逻辑。简单来说,当触发后再次触发,会取消上一次触发的执行,直到最后一次触发后过去设定时间后才执行。
28 5
|
3月前
|
算法 前端开发
2627. 函数防抖
2627. 函数防抖
17 0
|
9月前
什么是防抖和节流,怎么实现一个防抖和节流?
功能:当事件被触发N秒之后再执行回调,如果在N秒内被触发,则重新计时。
|
9月前
|
前端开发 UED
面试官:防抖和节流的区别是啥?实现一个防抖和节流函数(一)
面试官:防抖和节流的区别是啥?实现一个防抖和节流函数(一)
面试官:防抖和节流的区别是啥?实现一个防抖和节流函数(二)
面试官:防抖和节流的区别是啥?实现一个防抖和节流函数(二)
|
9月前
|
JavaScript
原生js实现一个节流函数和防抖函数?
原生js实现一个节流函数和防抖函数?
51 0
|
9月前
|
JavaScript
如何通过原生js实现一个节流函数和防抖函数?
如何通过原生js实现一个节流函数和防抖函数?
|
9月前
|
前端开发
什么是防抖和节流?有什么区别?
什么是防抖和节流?有什么区别?
48 0