web
22 小时以前 49fa0d82a40345342966e810b44429aec0480ef3
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// @ts-nocheck
/**
 * 节流函数,用于限制函数的调用频率
 * @param fn 要进行节流的函数
 * @param delay 两次调用之间的最小间隔时间
 * @returns 节流后的函数
 */
 
// #ifndef UNI-APP-X && APP
export function throttle(fn: (...args: any[]) => void, delay: number) {
  let flag = true; // 标记是否可以执行函数
 
  return (...args: any[]) => {
    if (flag) {
      flag = false; // 设置为不可执行状态
      fn(...args); // 执行传入的函数
 
      setTimeout(() => {
        flag = true; // 经过指定时间后,设置为可执行状态
      }, delay);
    }
  };
}
// #endif
 
 
// #ifdef UNI-APP-X && APP
// type Rfun = (...args: any[]) => void
// type Rfun = (...args: any[]) => void
 
export function throttle<T extends any|null>(
    fn: (args : T) => void, 
    delay: number):(args : T) => void {
    let flag = true; // 标记是否可以执行函数
    
    return (args : T) =>{
        if(flag){
            flag = false;
            fn(args);
            
            setTimeout(()=>{
                flag = true;
            }, delay)
        }
    }
  // return (...args: any[]) => {
  //   // if (flag) {
  //   //   flag = false; // 设置为不可执行状态
  //   //   fn(...args); // 执行传入的函数
 
  //   //   setTimeout(() => {
  //   //     flag = true; // 经过指定时间后,设置为可执行状态
  //   //   }, delay);
  //   // }
  // };
}
 
// #endif
 
// // 示例
// // 定义一个被节流的函数
// function handleScroll() {
//   console.log("Scroll event handled!");
// }
 
// // 使用节流函数对 handleScroll 进行节流,间隔时间为 500 毫秒
// const throttledScroll = throttle(handleScroll, 500);
 
// // 模拟多次调用 handleScroll
// throttledScroll(); // 输出 "Scroll event handled!"
// throttledScroll(); // 不会输出
// throttledScroll(); // 不会输出
 
// // 经过 500 毫秒后,再次调用 handleScroll
// setTimeout(() => {
//   throttledScroll(); // 输出 "Scroll event handled!"
// }, 500);