util.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /**
  2. * 绑定事件
  3. *
  4. * @export
  5. * @param {any} dom
  6. * @param {any} eventType
  7. * @param {any} callback
  8. */
  9. export function on (dom, eventType, callback) {
  10. if (document.addEventListener) {
  11. dom.addEventListener(eventType, callback)
  12. } else {
  13. dom.attachEvent('on' + eventType, callback)
  14. }
  15. }
  16. /**
  17. * 解绑事件
  18. *
  19. * @export
  20. * @param {any} dom
  21. * @param {any} eventType
  22. * @param {any} callback
  23. */
  24. export function off (dom, eventType, callback) {
  25. if (document.addEventListener) {
  26. dom.removeEventListener(eventType, callback)
  27. } else {
  28. dom.detachEvent('on' + eventType, callback)
  29. }
  30. }
  31. /**
  32. * 节流函数生成器
  33. * 对于调用频繁的地方,可保障在设置时间内只执行1次。
  34. * 使用方法:
  35. *
  36. * const currentThrottle = generateThrottle() //生成一个节流函数
  37. * currentThrottle(Data.now()) //如果超过了阈值则返回true,否则返回false
  38. *
  39. * @param throttleTime 设置此生成器的阈值
  40. */
  41. export const generateThrottle = function (throttleTime) {
  42. let time = Date.now()
  43. return function (now) {
  44. // 如果没有设置节流时间, 使用默认配置的时间 14毫秒
  45. if (now - time > (throttleTime || 14)) {
  46. time = now
  47. return true
  48. }
  49. }
  50. }
  51. /**
  52. * 防反跳。func函数在最后一次调用时刻的wait毫秒之后执行!
  53. * @param func 执行函数
  54. * @param wait 时间间隔
  55. * @param immediate 为true,debounce会在wai 时间间隔的开始调用这个函数
  56. * @returns {Function}
  57. */
  58. export const debounce = function (func, wait, immediate) {
  59. var timeout, args, context, timestamp, result
  60. var later = function () {
  61. var last = new Date().getTime() - timestamp // timestamp会实时更新
  62. if (last < wait && last >= 0) {
  63. timeout = setTimeout(later, wait - last)
  64. } else {
  65. timeout = null
  66. if (!immediate) {
  67. result = func.apply(context, args)
  68. if (!timeout) context = args = null
  69. }
  70. }
  71. }
  72. return function () {
  73. context = this
  74. args = arguments
  75. timestamp = new Date().getTime()
  76. var callNow = immediate && !timeout
  77. if (!timeout) {
  78. timeout = setTimeout(later, wait)
  79. }
  80. if (callNow) {
  81. result = func.apply(context, args)
  82. context = args = null
  83. }
  84. return result
  85. }
  86. }