throttle.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. let timer;
  2. let flag;
  3. let timer2;
  4. let flag2;
  5. /**
  6. * 节流原理:在一定时间内,只能触发一次
  7. *
  8. * @param {Function} func 要执行的回调函数
  9. * @param {Number} wait 延时的时间
  10. * @param {Boolean} immediate 是否立即执行
  11. * @return null
  12. */
  13. export function throttle(func, wait = 500, immediate = true) {
  14. if (immediate) {
  15. if (!flag) {
  16. flag = true
  17. // 如果是立即执行,则在wait毫秒内开始时执行
  18. typeof func === 'function' && func()
  19. timer = setTimeout(() => {
  20. flag = false
  21. }, wait)
  22. }
  23. } else if (!flag) {
  24. flag = true
  25. // 如果是非立即执行,则在wait毫秒内的结束处执行
  26. timer = setTimeout(() => {
  27. flag = false
  28. typeof func === 'function' && func()
  29. }, wait)
  30. }
  31. }
  32. export function throttle2(func, wait = 500, immediate = true) {
  33. if (immediate) {
  34. if (!flag2) {
  35. flag2 = true
  36. // 如果是立即执行,则在wait毫秒内开始时执行
  37. typeof func === 'function' && func()
  38. timer2 = setTimeout(() => {
  39. flag2 = false
  40. }, wait)
  41. }
  42. } else if (!flag2) {
  43. flag2 = true
  44. // 如果是非立即执行,则在wait毫秒内的结束处执行
  45. timer2 = setTimeout(() => {
  46. flag2 = false
  47. typeof func === 'function' && func()
  48. }, wait)
  49. }
  50. }