Skip to content

Commit 236ddf0

Browse files
Preventing duplicate event listener registrations (#554)
* feat: prevent duplicate registration * feat: add defensive code * feat: delete set value * modify: defensive code 'throw error > console.warn' * modify: defensive code > use 'eventName' * modfiy: delete getTime * modify: listeners delete key --------- Co-authored-by: bitto-dunamu <bitto@dunamu.com>
1 parent 81e7b17 commit 236ddf0

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

modules/mixins/animate-scroll.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,9 +171,10 @@ const animateTopScroll = (scrollOffset, options, to, target) => {
171171

172172
window.clearTimeout(options.data.delayTimeout);
173173

174-
cancelEvents.subscribe(() => {
174+
const setCancel = () => {
175175
options.data.cancel = true;
176-
});
176+
};
177+
cancelEvents.subscribe(setCancel);
177178

178179
setContainer(options);
179180

modules/mixins/passive-event-listeners.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@
44
* to wait for the listener to return.
55
*/
66
export const addPassiveEventListener = (target, eventName, listener) => {
7+
let listenerName = listener.name;
8+
if (!listenerName) {
9+
listenerName = eventName;
10+
console.warn('Listener must be a named function.');
11+
}
12+
13+
if (!attachedListeners.has(eventName)) attachedListeners.set(eventName, new Set());
14+
const listeners = attachedListeners.get(eventName);
15+
if (listeners.has(listenerName)) return;
16+
717
const supportsPassiveOption = (() => {
818
let supportsPassiveOption = false;
919
try {
@@ -17,9 +27,12 @@ export const addPassiveEventListener = (target, eventName, listener) => {
1727
return supportsPassiveOption;
1828
})();
1929
target.addEventListener(eventName, listener, supportsPassiveOption ? { passive: true } : false);
30+
listeners.add(listenerName);
2031
};
2132

2233
export const removePassiveEventListener = (target, eventName, listener) => {
2334
target.removeEventListener(eventName, listener);
35+
attachedListeners.get(eventName).delete(listener.name || eventName);
2436
}
2537

38+
const attachedListeners = new Map();

0 commit comments

Comments
 (0)