├── README.md ├── demo.html └── little-event-center.js /README.md: -------------------------------------------------------------------------------- 1 | little-event-center 2 | =================== 3 | 4 | A very little event center, easy, fast, useful. 5 | -------------------------------------------------------------------------------- /demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | little-event-center 6 | 7 | 8 | 9 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /little-event-center.js: -------------------------------------------------------------------------------- 1 | var eventCenter = function() { 2 | var eventList = {}; 3 | var eventOnceList = {}; 4 | 5 | var _on = function(eventName, fun, isOnce) { 6 | if (!eventName) { 7 | throw('No event name.'); 8 | } 9 | else if (!fun) { 10 | throw('No callback function.'); 11 | } 12 | var list = eventName.split(/\s+/); 13 | var tempList; 14 | if (!isOnce) { 15 | tempList = eventList; 16 | } 17 | else { 18 | tempList = eventOnceList; 19 | } 20 | for (var i = 0, l = list.length; i < l; i ++) { 21 | if (list[i]) { 22 | if (!tempList[list[i]]) { 23 | tempList[list[i]] = []; 24 | } 25 | tempList[list[i]].push(fun); 26 | } 27 | } 28 | }; 29 | 30 | var _off = function(eventName, fun, isOnce) { 31 | var tempList; 32 | if (!isOnce) { 33 | tempList = eventList; 34 | } else { 35 | tempList = eventOnceList; 36 | } 37 | if (tempList[eventName]) { 38 | var i = 0; 39 | var l = tempList[eventName].length; 40 | for (; i < l; i ++) { 41 | if (tempList[eventName][i] === fun) { 42 | tempList[eventName].splice(i, 1); 43 | // 每次只清除掉一个 44 | return; 45 | } 46 | } 47 | } 48 | }; 49 | 50 | return { 51 | on: function(eventName, fun) { 52 | _on(eventName, fun); 53 | return this; 54 | }, 55 | once: function(eventName, fun) { 56 | _on(eventName, fun, true); 57 | return this; 58 | }, 59 | emit: function(eventName, data) { 60 | if (!eventName) { 61 | throw('No emit event name.'); 62 | } 63 | var i = 0; 64 | var l = 0; 65 | var listeners; 66 | if (eventList[eventName]) { 67 | // 有可能执行过程中,通过 off 删除了某个事件对应的方法,这里先复制一份出来 68 | listeners = eventList[eventName].slice(); 69 | i = 0; 70 | l = listeners.length; 71 | for (; i < l; i ++) { 72 | listeners[i].call(this, data); 73 | } 74 | } 75 | if (eventOnceList[eventName]) { 76 | // 有可能执行过程中,通过 off 删除了某个事件对应的方法,这里先复制一份出来 77 | listeners = eventOnceList[eventName].slice(); 78 | i = 0; 79 | l = listeners.length; 80 | for (; i < l; i ++) { 81 | listeners[i].call(this, data); 82 | _off(eventName, listeners[i], true); 83 | } 84 | } 85 | return this; 86 | }, 87 | off: function(eventName, fun) { 88 | _off(eventName, fun); 89 | return this; 90 | } 91 | }; 92 | }; --------------------------------------------------------------------------------