├── 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 | };
--------------------------------------------------------------------------------