JavaScript 中的防抖和节流的应用场景

防抖节流都是一些前端优化技术,用于控制 JavaScript 代码的执行频率。它们可以有效减少一些耗时操作对页面性能的影响,提高用户体验。

防抖(Debounce)是指在短时间内连续触发同一事件时,只会执行一次处理函数,并且在最后一次触发之后指定的时间间隔内不再执行。常见的应用场景包括搜索框输入时实时搜索、窗口大小调整后重新布局等等。

节流(Throttle)则是指当持续触发事件时,每隔一段时间只执行一次处理函数。例如,当用户快速滚动页面时,监听页面滚动事件并不需要每次都执行处理函数,而是每隔一定时间才执行一次。常见的应用场景包括页面滚动加载、点击按钮防止重复提交等等。

以下是两种方法的实现代码:

防抖

function debounce(fn, delay) {
  let timer = null;
  return function() {
    const context = this;
    const args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function() {
      fn.apply(context, args);
    }, delay);
  };
}

在上面的代码中,我们定义了一个 debounce 函数,它接受两个参数:要执行的处理函数和设定的时间间隔。我们创建了一个计时器,在设定的时间间隔内检测是否有新的事件触发,如果有,则清除计时器并重新开始计时。否则,执行处理函数并传递参数。

节流

function throttle(fn, delay) {
  let timer = null;
  return function() {
    const context = this;
    const args = arguments;
    if (!timer) {
      timer = setTimeout(function() {
        fn.apply(context, args);
        timer = null;
      }, delay);
    }
  };
}

在上面的代码中,我们定义了一个 throttle 函数,它接受两个参数:要执行的处理函数和设定的时间间隔。我们创建了一个计时器,在设定的时间间隔内只允许执行一次处理函数。如果在这段时间内再次触发,则忽略它。当计时器完成后,将其重置为 null,以便下一次执行。

给TA打赏
共{{data.count}}人
人已打赏
技术教程

konva.js 阻止 click 事件冒泡到父元素

2023-3-29 15:47:12

技术教程

JavaScript 中 forEach 和 map 有什么区别

2023-4-18 11:17:57

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索