全网最易懂的防抖和节流

防抖函数:

在规定时间内只执行一次函数,如果在规定时间内触发多次,按最后一次触发的时间作为起始时间来延迟执行函数。

使用示例:

假设我们有一个输入框,用户输入时我们想要执行一个搜索操作,但不希望在每个字符输入时都进行搜索,而是希望用户停止输入后等待一段时间再执行搜索操作。可以这样使用防抖函数:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Debounce Example</title>
</head>
<body>
  <input type="text" id="searchBox" placeholder="Type to search..." />
  <script>
      //防抖函数
    function debounce(callback, delay) {
      var t = null;
        //返回匿名函数
      return function () {
        //清除定时器
        clearTimeout(t);
        //设置一个新的定时器,在 delay 毫秒后执行 callback 函数。
        t = setTimeout(callback, delay);
      };
    }

    function search() {
      console.log('Search query:', document.getElementById('searchBox').value);
    }

    const debouncedSearch = debounce(search, 300);

    document.getElementById('searchBox').addEventListener('input', debouncedSearch);
  </script>
</body>
</html>

节流函数:

在规定时间内以第一次触发时间开始,到规定时间结束,这期间只执行一次函数,如果中途有其它的触发事件,则忽视。用于限制函数的执行频率。

使用示例:

多次点击按钮时,在2s内只执行一次的功能,我们可以使用节流函数来限制按钮点击事件的执行频率。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Throttle Button Click</title>
  <style>
    #log {
      font-family: Arial, sans-serif;
      padding: 20px;
      border: 1px solid #ccc;
      height: 200px;
      overflow: auto;
    }
    button {
      padding: 10px 20px;
      font-size: 16px;
    }
  </style>
</head>
<body>
  <button id="throttleButton">Click Me</button>
  <div id="log"></div>
  <script>
    // 节流函数实现
    function throttle(callback, delay) {
      let lastCall = 0;
      return function (...args) {
        const now = Date.now();
           //表示自上次回调执行以来,已经经过了至少 delay 毫秒。因此,可以执行回调函数。
        if (now - lastCall >= delay) {
          lastCall = now;
          callback.apply(this, args);
        }
      };
    }

    // 按钮点击事件处理函数
    function handleClick() {
      const logDiv = document.getElementById('log');
      logDiv.innerHTML += `Button clicked at ${new Date().toLocaleTimeString()}<br>`;
      logDiv.scrollTop = logDiv.scrollHeight;
    }

    // 通过节流函数包装点击事件处理函数
    const throttledClick = throttle(handleClick, 2000); // 2秒节流时间

    // 绑定按钮点击事件
    document.getElementById('throttleButton').addEventListener('click', throttledClick);
  </script>
</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爪洼守门员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值