Created
March 1, 2017 17:11
-
-
Save Caldis/446369be7614820f02ef10b9d0249daf to your computer and use it in GitHub Desktop.
GlobalEvent.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 全局事件工具类 | |
// 放全局事件的对象 | |
const eventDOM = document.querySelector('html'); | |
// 全局事件的数据 | |
window["eventOBJ"] = {}; const eventOBJ = window.eventOBJ; | |
// 全局事件的回调函数引用 | |
window["eventCAB"] = {}; const eventCAB = window.eventCAB; | |
export const GlobalEvent = { | |
// 添加对应事件的 Handler | |
addEventHandler: (type, handler, cleanBeforeAdd) => { | |
// 定义事件名 | |
const typeName = "on" + type; | |
// 初始化对应类型的全局事件的回调函数引用 | |
if (!eventCAB[typeName]) eventCAB[typeName] = []; | |
// 如果有存在的事件, 则先移除 | |
if (cleanBeforeAdd && eventCAB[typeName].length) { | |
eventCAB[typeName].forEach(eventHandler => { | |
GlobalEvent.removeEventHandler(type, eventHandler); | |
}); | |
eventCAB[typeName] = []; | |
} | |
// 保存 handler 的句柄, handler 接受的的参数是全局对象中的 eventOBJ.type 的对应值 | |
const eventHandler = () => { handler(window.eventOBJ[type]) }; | |
eventCAB[typeName].push(eventHandler); | |
// 绑定事件 | |
if (eventDOM.addEventListener) { | |
eventDOM.addEventListener(typeName, eventHandler, false); | |
} else if (eventDOM.attachEvent) { | |
eventDOM.attachEvent(typeName, eventHandler); | |
} else { | |
eventDOM[typeName] = eventHandler; | |
} | |
}, | |
dispatchEvent: (type, data) => { | |
// 先把数据存到全局变量中 | |
window.eventOBJ[type] = data; | |
// 再发送事件 | |
const typeName = "on" + type; | |
if (eventDOM.dispatchEvent) { | |
const event = new Event(typeName); | |
eventDOM.dispatchEvent(event); | |
} else if (document.createEvent) { | |
const event = document.createEvent('Event'); | |
event.initEvent(typeName, true, true); | |
eventDOM.dispatchEvent(event); | |
} | |
}, | |
// 移除对应事件的Handler | |
removeEventHandler: (type, handler) => { | |
// 定义事件名 | |
const typeName = "on" + type; | |
// 移除事件 | |
if (eventDOM.removeEventListener) { | |
eventDOM.removeEventListener(typeName, handler, false); | |
} else if (eventDOM.detachEvent) { | |
eventDOM.detachEvent(typeName, handler); | |
} else { | |
eventDOM[typeName] = null; | |
} | |
}, | |
// 获取事件 (浏览器兼容) | |
getEvent: function (event) { | |
return event ? event : window.event; | |
}, | |
// 获取事件目标 (浏览器兼容) | |
getTarget: function (event) { | |
return event.target || event.srcElement; | |
}, | |
// 阻止事件默认行为 | |
preventDefault: function (event) { | |
if (event.preventDefault) { | |
event.preventDefault(); | |
} else { | |
event.returnValue = false; | |
} | |
}, | |
// 阻止事件冒泡 | |
stopPropagation: function (event) { | |
if (event.stopPropagation) { | |
event.stopPropagation(); | |
} else { | |
event.cancelBubble = true; | |
} | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment