| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import XEUtils from 'xe-utils'
- import { browse } from './dom'
- export const EVENT_KEYS = {
- F2: 'F2',
- ESCAPE: 'Escape',
- ENTER: 'Enter',
- TAB: 'Tab',
- DELETE: 'Delete',
- BACKSPACE: 'Backspace',
- SPACEBAR: ' ',
- CONTEXT_MENU: 'ContextMenu',
- ARROW_UP: 'ArrowUp',
- ARROW_DOWN: 'ArrowDown',
- ARROW_LEFT: 'ArrowLeft',
- ARROW_RIGHT: 'ArrowRight',
- PAGE_UP: 'PageUp',
- PAGE_DOWN: 'PageDown'
- }
- const convertEventKeys = {
- ' ': 'Spacebar',
- Apps: EVENT_KEYS.CONTEXT_MENU,
- Del: EVENT_KEYS.DELETE,
- Up: EVENT_KEYS.ARROW_UP,
- Down: EVENT_KEYS.ARROW_DOWN,
- Left: EVENT_KEYS.ARROW_LEFT,
- Right: EVENT_KEYS.ARROW_RIGHT
- }
- // 监听全局事件
- const wheelName = browse.firefox ? 'DOMMouseScroll' : 'mousewheel'
- const eventStore = []
- export const hasEventKey = (evnt, targetKey) => {
- const { key } = evnt
- targetKey = targetKey.toLowerCase()
- return key ? (targetKey === key.toLowerCase() || !!(convertEventKeys[key] && convertEventKeys[key].toLowerCase() === targetKey)) : false
- }
- export const GlobalEvent = {
- on (comp, type, cb) {
- if (cb) {
- eventStore.push({ comp, type, cb })
- }
- },
- off (comp, type) {
- XEUtils.remove(eventStore, item => item.comp === comp && item.type === type)
- },
- trigger (evnt) {
- const isWheel = evnt.type === wheelName
- eventStore.forEach(({ comp, type, cb }) => {
- // 如果被取消冒泡,不再执行
- if (!evnt.cancelBubble) {
- if (type === evnt.type || (isWheel && type === 'mousewheel')) {
- cb.call(comp, evnt)
- }
- }
- })
- },
- eqKeypad (evnt, keyVal) {
- const { key } = evnt
- if (keyVal.toLowerCase() === key.toLowerCase()) {
- return true
- }
- return false
- }
- }
- if (browse.isDoc) {
- if (!browse.msie) {
- document.addEventListener('copy', GlobalEvent.trigger, false)
- document.addEventListener('cut', GlobalEvent.trigger, false)
- document.addEventListener('paste', GlobalEvent.trigger, false)
- }
- document.addEventListener('keydown', GlobalEvent.trigger, false)
- document.addEventListener('contextmenu', GlobalEvent.trigger, false)
- window.addEventListener('mousedown', GlobalEvent.trigger, false)
- window.addEventListener('blur', GlobalEvent.trigger, false)
- window.addEventListener('resize', GlobalEvent.trigger, false)
- window.addEventListener(wheelName, XEUtils.throttle(GlobalEvent.trigger, 100, { leading: true, trailing: false }), false)
- }
|