index.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // @ts-nocheck
  2. /**
  3. * 节流函数,用于限制函数的调用频率
  4. * @param fn 要进行节流的函数
  5. * @param delay 两次调用之间的最小间隔时间
  6. * @returns 节流后的函数
  7. */
  8. // #ifndef UNI-APP-X && APP
  9. export function throttle(fn: (...args: any[]) => void, delay: number) {
  10. let flag = true; // 标记是否可以执行函数
  11. return (...args: any[]) => {
  12. if (flag) {
  13. flag = false; // 设置为不可执行状态
  14. fn(...args); // 执行传入的函数
  15. setTimeout(() => {
  16. flag = true; // 经过指定时间后,设置为可执行状态
  17. }, delay);
  18. }
  19. };
  20. }
  21. // #endif
  22. // #ifdef UNI-APP-X && APP
  23. // type Rfun = (...args: any[]) => void
  24. // type Rfun = (...args: any[]) => void
  25. export function throttle<T extends any|null>(
  26. fn: (args : T) => void,
  27. delay: number):(args : T) => void {
  28. let flag = true; // 标记是否可以执行函数
  29. return (args : T) =>{
  30. if(flag){
  31. flag = false;
  32. fn(args);
  33. setTimeout(()=>{
  34. flag = true;
  35. }, delay)
  36. }
  37. }
  38. // return (...args: any[]) => {
  39. // // if (flag) {
  40. // // flag = false; // 设置为不可执行状态
  41. // // fn(...args); // 执行传入的函数
  42. // // setTimeout(() => {
  43. // // flag = true; // 经过指定时间后,设置为可执行状态
  44. // // }, delay);
  45. // // }
  46. // };
  47. }
  48. // #endif
  49. // // 示例
  50. // // 定义一个被节流的函数
  51. // function handleScroll() {
  52. // console.log("Scroll event handled!");
  53. // }
  54. // // 使用节流函数对 handleScroll 进行节流,间隔时间为 500 毫秒
  55. // const throttledScroll = throttle(handleScroll, 500);
  56. // // 模拟多次调用 handleScroll
  57. // throttledScroll(); // 输出 "Scroll event handled!"
  58. // throttledScroll(); // 不会输出
  59. // throttledScroll(); // 不会输出
  60. // // 经过 500 毫秒后,再次调用 handleScroll
  61. // setTimeout(() => {
  62. // throttledScroll(); // 输出 "Scroll event handled!"
  63. // }, 500);