|
1 | | -const makeMapListenersBag = require('./listeners-bag'); |
| 1 | +const makeListenersBag = require('./listeners-bag'); |
2 | 2 | const makeCountingSet = require('./counting-set'); |
3 | 3 |
|
4 | 4 | module.exports = eventHandler; |
5 | 5 |
|
6 | 6 | const mouseEvents = asMap(['mouseenter', 'mouseover', 'mouseleave']); |
7 | 7 |
|
8 | 8 | function eventHandler(_m) { |
9 | | - const listenersBag = makeMapListenersBag(); |
10 | | - |
| 9 | + const listenersBag = makeListenersBag(); |
11 | 10 | const activeTypes = makeCountingSet(); |
| 11 | + const holdFireSet = new Set(); |
12 | 12 |
|
13 | 13 | function on(type, listener) { |
14 | 14 | if (listenersBag.add(type, listener)) { |
@@ -59,22 +59,38 @@ function eventHandler(_m) { |
59 | 59 | listenersBag.getListeners(type).forEach(listener => listener.call(_m, e)); |
60 | 60 | } |
61 | 61 |
|
| 62 | + function fireEventUnlessHold(type, e) { |
| 63 | + if (!holdFireSet.has(type)) { |
| 64 | + fireEvent(type, e); |
| 65 | + } |
| 66 | + } |
| 67 | + |
62 | 68 | function onmousemove(e) { |
63 | | - fireEvent('mousemove', e); |
| 69 | + fireEventUnlessHold('mousemove', e); |
64 | 70 | } |
65 | 71 |
|
66 | 72 | function onmouseout(e) { |
67 | | - fireEvent('mouseout', e); |
| 73 | + fireEventUnlessHold('mouseout', e); |
68 | 74 | } |
69 | 75 |
|
70 | 76 | function onevent(e) { |
71 | 77 | const { type } = e; |
72 | | - fireEvent(type, e); |
| 78 | + fireEventUnlessHold(type, e); |
| 79 | + } |
| 80 | + |
| 81 | + function holdFire(type, set) { |
| 82 | + if (set) { |
| 83 | + holdFireSet.add(type); |
| 84 | + } else { |
| 85 | + holdFireSet.delete(type); |
| 86 | + } |
73 | 87 | } |
74 | 88 |
|
75 | 89 | return { |
76 | 90 | on, |
77 | | - off |
| 91 | + off, |
| 92 | + fireEvent, |
| 93 | + holdFire |
78 | 94 | }; |
79 | 95 | } |
80 | 96 |
|
|
0 commit comments