throttle.js 873 B

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