Created
June 29, 2010 14:59
-
-
Save miya2000/457318 to your computer and use it in GitHub Desktop.
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
| /** | |
| * EventDispatcher | |
| * @see http://www.fladdict.net/blog-jp/archives/2005/06/javascript.php | |
| * @see http://nanto.asablo.jp/blog/2007/03/23/1339498 | |
| */ | |
| function EventDispatcher(thisObj) { | |
| if (this instanceof EventDispatcher) { | |
| this.addEventListener = addEventListener; | |
| this.removeEventListener = removeEventListener; | |
| this.dispatchEvent = dispatchEvent; | |
| } | |
| if (thisObj) { | |
| thisObj.addEventListener = addEventListener; | |
| thisObj.removeEventListener = removeEventListener; | |
| thisObj.dispatchEvent = dispatchEvent; | |
| } | |
| var ec = {}; | |
| function addEventListener(type, listener) { | |
| if (typeof listener != 'function') return; | |
| if (ec[type] == null) { ec[type] = [listener]; return; } | |
| var listeners = ec[type]; | |
| for (var i = 0, len = listeners.length; i < len; i++) { | |
| if (listeners[i] === listener) { return; } | |
| } | |
| listeners.push(listener); | |
| } | |
| function removeEventListener(type, listener) { | |
| if (ec[type] == null) return; | |
| var listeners = ec[type]; | |
| for (var i = 0, len = listeners.length; i < len; i++) { | |
| if (listeners[i] === listener) { listeners.splice(i, 1); break; } | |
| } | |
| } | |
| function dispatchEvent(event) { | |
| if (ec[event.type] == null) return true; | |
| event.target = this; | |
| event.currentTarget = this; | |
| event.eventPhase = 2; // support target phase only. | |
| var canceled = false; | |
| event.preventDefault = function preventDefault() { if (event.cancelable) canceled = true; }; | |
| event.stopPropagation = function stopPropagation() {}; | |
| var listeners = ec[event.type]; | |
| for (var i = 0, len = listeners.length; i < len; i++) { | |
| var res = listeners[i].call(event.currentTarget, event); | |
| if (event.cancelable && !canceled) { | |
| if (res == false || event.returnValue == false) canceled = true; | |
| } | |
| } | |
| return !canceled; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment