首页  >  文章  >  web前端  >  如何在没有外部库的情况下用 JavaScript 实现简单的节流功能?

如何在没有外部库的情况下用 JavaScript 实现简单的节流功能?

Patricia Arquette
Patricia Arquette原创
2024-10-25 06:41:02943浏览

How to Implement a Simple Throttle Function in JavaScript without External Libraries?

无需外部库的 JavaScript 中的简单节流

简介

在 JavaScript 中,节流是一种用于限制速率的技术可以执行函数的位置。

自定义节流函数

提供的自定义节流函数虽然有效,但有一个缺陷,即它会在节流时间完成后再次触发该函数。这是一个改进的版本:

<code class="js">function throttle(fn, wait, options) {
  if (!options) options = {};
  var context,
    args,
    result,
    timeout = null,
    previous = 0;
  var later = function () {
    previous = options.leading === false ? 0 : Date.now();
    timeout = null;
    result = fn.apply(context, args);
    if (!timeout) context = args = null;
  };
  return function () {
    var now = Date.now();
    if (!previous && options.leading === false) previous = now;
    var remaining = wait - (now - previous);
    context = this;
    args = arguments;
    if (remaining <= 0 || remaining > wait) {
      if (timeout) {
        clearTimeout(timeout);
        timeout = null;
      }
      previous = now;
      result = fn.apply(context, args);
      if (!timeout) context = args = null;
    } else if (!timeout && options.trailing !== false) {
      timeout = setTimeout(later, remaining);
    }
    return result;
  };
}</code>

此版本通过实现前缘和后缘行为的可自定义选项,解决了节流周期后多次触发的问题。

简化的节流功能

如果您不需要高级选项,可以使用简化的、不可配置的节流功能:

<code class="js">function throttle(callback, limit) {
  var waiting = false;
  return function () {
    if (!waiting) {
      callback.apply(this, arguments);
      waiting = true;
      setTimeout(function () {
        waiting = false;
      }, limit);
    }
  };
}</code>

以上是如何在没有外部库的情况下用 JavaScript 实现简单的节流功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn