zouyu
2023-11-17 d8ac6057eaad648687699e25a575f3b7b8c1b102
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
 * 防抖
 * 高频事件触发调用,高频(小于delay)事件停止后,只触发最后一次事件,在delay时间后执行调用业务
 */
export function debounce(fn, delay, node) {
  let timer = null
  return function() {
    if (timer) {
      // 清除当前定时器,若当前定时器没有足够的delay时间,还未来得及执行,则被清除后,不再执行fn,若当前定时器有足够的delay时间,则去执行fn,清不清除无所谓
      clearTimeout(timer)
      // 创建新的定时器
      timer = setTimeout(() => {
        node[fn]()
      }, delay)
    } else {
      // 创建新的定时器
      timer = setTimeout(() => {
        node[fn]()
      }, delay)
    }
  }
}
 
/**
 * 节流
 * 高频事件触发调用,只要高频(小于delay)事件不停止,则每隔一段delay时间,都会执行调用业务
 */
export function throttle(fn, delay) {
  let valid = true
  return function() {
    if (!valid) {
      // 休息时间 暂不接客
      return false
    }
    // 工作时间,执行函数并且在间隔期内把状态位设为无效
    valid = false
    setTimeout(() => {
      this[fn]()
      valid = true
    }, delay)
  }
}