JS 防抖封装方法

防抖封装方法:

javascript 复制代码
/**
 * @param {Function} func
 * @param {number} wait
 * @param {boolean} immediate
 * @return {*}
 */
export function debounce(func, wait, immediate) {
  let timeout, args, context, timestamp, result

  const later = function () {
    // 据上一次触发时间间隔
    const last = +new Date() - timestamp

    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
    if (last < wait && last > 0) {
      timeout = setTimeout(later, wait - last)
    } else {
      timeout = null
      // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
      if (!immediate) {
        result = func.apply(context, args)
        if (!timeout) context = args = null
      }
    }
  }

  return function (...args) {
    context = this
    timestamp = +new Date()
    const callNow = immediate && !timeout
    // 如果延时不存在,重新设定延时
    if (!timeout) timeout = setTimeout(later, wait)
    if (callNow) {
      result = func.apply(context, args)
      context = args = null
    }

    return result
  }
}
相关推荐
毕设源码-朱学姐6 分钟前
【开题答辩全过程】以 基于Java的网上花店管理系统设计与实现为例,包含答辩的问题和答案
java·开发语言
zls3653656 分钟前
C# WPF canvas中绘制缺陷分布map
开发语言·c#·wpf
lly2024069 分钟前
并查集快速合并
开发语言
J2虾虾10 分钟前
Vite前端项目构建
前端
神仙别闹10 分钟前
基于 Java 的 I Don’t Wanna Be The Bugger 冒险游戏
java·开发语言·dubbo
季明洵11 分钟前
Java实现栈和最小栈
java·开发语言·数据结构·
Wect14 分钟前
LeetCode 106. 从中序与后序遍历序列构造二叉树:题解+思路拆解
前端·算法·typescript
yuki_uix14 分钟前
当系统"没了头"(headless),AI 反而更好接手了?
前端
滕青山14 分钟前
JSON转TypeScript接口核心JS实现
前端·javascript·vue.js
专注VB编程开发20年18 分钟前
C#,VB.NET多台电脑读取REDIS服务器,如何保证数据不会冲突
前端·redis·bootstrap·html