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)
| }
| }
|
|