1. 初次触发事件,立即执行(可选)
    2. 对于在事件被触发 n 秒后再执行的回调,即延迟执行
    3. 如果在这 n 秒内再触发事件,重新开始计时

      1. /**
      2. * @description 防抖函数
      3. * @param {function} fn - 目标函数
      4. * @param {number} delay - 延迟时间
      5. * @param {boolean} triggerNow - 是否立即执行
      6. * @returns {function}
      7. */
      8. function debounce (fn, delay, triggerNow) {
      9. var t = null;
      10. var debounce = function () {
      11. var _self = this,
      12. args = arguments;
      13. if (t) {
      14. clearTimeout(t);
      15. }
      16. if (triggerNow) {
      17. var exec = !t;
      18. t = setTimeout(function () {
      19. t = null;
      20. }, delay);
      21. if (exec) {
      22. fn.apply(_self, args);
      23. }
      24. } else {
      25. t = setTimeout(function () {
      26. fn.apply(_self, args);
      27. }, delay);
      28. }
      29. }
      30. debounce.remove = function () {
      31. clearTimeout(t);
      32. t = null;
      33. }
      34. return debounce;
      35. }