返回

你也许不知道,你与节流去抖只差一篇入门教程!

前端

前言

在前端开发中,经常会遇到需要对事件进行处理的情况,比如点击、滚动、输入等。如果我们对这些事件进行频繁的监听,会导致性能下降,甚至出现卡顿等问题。为了解决这个问题,我们需要使用节流和去抖技术来优化事件的处理。

一、什么是节流?

节流是指在一段时间内只允许执行一次函数。即使在该段时间内事件被触发多次,函数也只执行一次。

二、节流的实现

节流函数的实现有很多种,这里介绍两种常用的方法:

1. 定时器方法

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

2. 时间戳方法

function throttle(fn, delay) {
  let lastTime = 0;
  return function () {
    let args = arguments;
    let now = Date.now();
    if (now - lastTime >= delay) {
      fn.apply(this, args);
      lastTime = now;
    }
  };
}

三、节流的应用场景

节流函数的应用场景有很多,这里列举几个常见的例子:

  • 搜索框输入时的实时联想
  • 监听 scroll 事件计算位置信息
  • 监听 resize 事件计算尺寸信息

四、什么是去抖?

去抖是指在一段时间内只执行一次函数。如果在该段时间内事件被触发多次,函数只执行最后一次。

五、去抖的实现

去抖函数的实现也有很多种,这里介绍两种常用的方法:

1. 定时器方法

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

2. 时间戳方法

function debounce(fn, delay) {
  let lastTime = 0;
  return function () {
    let args = arguments;
    let now = Date.now();
    if (now - lastTime >= delay) {
      fn.apply(this, args);
      lastTime = now;
    }
  };
}

六、去抖的应用场景

去抖函数的应用场景也有很多,这里列举几个常见的例子:

  • 注册时输入完用户名后检测是否被占用
  • 监听 resize 事件计算尺寸信息
  • 表单验证

结语

节流和去抖是前端开发中非常重要的两个知识点,它们可以帮助我们优化事件的处理,提高应用程序的性能。希望这篇教程能帮助你更好地理解和使用这两个技术。