event.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import XEUtils from 'xe-utils/ctor'
  2. import DomTools from './dom'
  3. // 监听全局事件
  4. const browse = DomTools.browse
  5. const wheelName = browse.firefox ? 'DOMMouseScroll' : 'mousewheel'
  6. const eventStore = []
  7. export const GlobalEvent = {
  8. on (comp, type, cb) {
  9. if (cb) {
  10. eventStore.push({ comp, type, cb })
  11. }
  12. },
  13. off (comp, type) {
  14. XEUtils.remove(eventStore, item => item.comp === comp && item.type === type)
  15. },
  16. trigger (evnt) {
  17. const isWheel = evnt.type === wheelName
  18. eventStore.forEach(({ comp, type, cb }) => {
  19. if (type === evnt.type || (isWheel && type === 'mousewheel')) {
  20. cb.call(comp, evnt)
  21. }
  22. })
  23. },
  24. eqKeypad (evnt, keyVal) {
  25. const { key } = evnt
  26. if (keyVal.toLowerCase() === key.toLowerCase()) {
  27. return true
  28. }
  29. return false
  30. }
  31. }
  32. if (browse.isDoc) {
  33. if (!browse.msie) {
  34. document.addEventListener('copy', GlobalEvent.trigger, false)
  35. document.addEventListener('cut', GlobalEvent.trigger, false)
  36. document.addEventListener('paste', GlobalEvent.trigger, false)
  37. }
  38. document.addEventListener('keydown', GlobalEvent.trigger, false)
  39. document.addEventListener('contextmenu', GlobalEvent.trigger, false)
  40. window.addEventListener('mousedown', GlobalEvent.trigger, false)
  41. window.addEventListener('blur', GlobalEvent.trigger, false)
  42. window.addEventListener('resize', GlobalEvent.trigger, false)
  43. window.addEventListener(wheelName, XEUtils.throttle(GlobalEvent.trigger, 100, { leading: true, trailing: false }), false)
  44. }
  45. export default GlobalEvent