throttle.js 823 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. /**
  2. * @desc 节流函数
  3. * @param {Function} callBack
  4. * @return {Function} fn
  5. */
  6. var throttle = function throttle(fn) {
  7. var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
  8. var _self = fn,
  9. //需要被延迟执行的函数引用
  10. timer = void 0,
  11. firstTime = true; //是否第一次调用
  12. return function () {
  13. var _this = this;
  14. var args = arguments;
  15. if (firstTime) {
  16. //第一次调用不用延迟
  17. _self.apply(this, args);
  18. firstTime = false;
  19. }
  20. if (timer) {
  21. //timer还在没结束前一次
  22. return false;
  23. }
  24. timer = setTimeout(function () {
  25. //延迟执行
  26. clearTimeout(timer);
  27. timer = null; //手动释放timer
  28. _self.apply(_this, args);
  29. }, delay);
  30. };
  31. };
  32. module.exports = throttle;