js其它

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > js其它 > TypeScript防抖节流

TypeScript防抖节流函数示例详解

作者:freeman_Tian

这篇文章主要为大家介绍了TypeScript防抖节流函数示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

防抖(Debounce):

防抖用于确保一个函数在指定时间内只触发一次。它在短时间内屡次触发同一个事件时,会勾销之前的触发,直到最初一次触发后的肯定工夫距离内没有新的触发才执行函数。

常见的利用场景包含:

/**
 * @description 防抖函数
 * @param {Function} fn
 * @param {number} delay
 * @param {boolean} immediate
 * @returns {Function}
 */
export function debounce<T extends (...args: any[]) => any>(
  fn: T,
  delay: number,
  immediate: boolean = false
): T & { cancel(): void } {
  let timerId: ReturnType<typeof setTimeout> | null = null; // 存储定时器
  // 定义一个cancel办法,用于勾销防抖
  const cancel = (): void => {
    if (timerId) {
      clearTimeout(timerId);
      timerId = null;
    }
  };
  const debounced = function (
    this: ThisParameterType<T>,
    ...args: Parameters<T>
  ): void {
    const context = this;
    if (timerId) {
      cancel();
    }
    if (immediate) {
      // 如果 immediate 为 true 并且没有正在期待执行的定时器,立刻执行指标函数
      if (!timerId) {
        fn.apply(context, args);
      }
      // 设置定时器,在延迟时间后将 timeoutId 设为 null
      timerId = setTimeout(() => {
        timerId = null;
      }, delay);
    } else {
      // 设置定时器,在延迟时间后执行指标函数
      timerId = setTimeout(() => {
        fn.apply(context, args);
      }, delay);
    }
  };
  // 将 cancel 办法附加到 debounced 函数上
  (debounced as any).cancel = cancel;
  return debounced as T & { cancel(): void };
}

节流(Throttle):

节流用于确保一个函数在肯定工夫内最多只触发一次。它会在触发事件期间以固定的工夫距离执行函数,而不论事件触发得多频繁。

常见的利用场景包含:

总之,防抖和节流技术都能够在不同场景下进步利用性能。防抖实用于屡次触发只需执行一次的状况,而节流实用于限度间断触发事件的执行频率。

/**
 * 节流函数
 * @param func 要进行节流的指标函数
 * @param delay 节流的工夫距离(毫秒)
 * @returns 返回一个通过节流解决的函数
 */
export function throttle<T extends (...args: any[]) => any>(
  fn: T,
  delay: number
): T {
  let lastCall: number | null = null; // 上一次调用的工夫戳
  return function (
    this: ThisParameterType<T>,
    ...args: Parameters<T>
  ): ReturnType<T> | void {
    const now = Date.now(); //以后工夫戳
    // 如果之前没有调用过,或者工夫距离超过了设定的值,执行指标函数
    if (!lastCall || now - lastCall >= delay) {
      lastCall = now;
      return fn.apply(this, args);
    }
  } as T;
}

以上就是TypeScript防抖节流实现示例详解的详细内容,更多关于TypeScript防抖节流的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文