Skip to content

Instantly share code, notes, and snippets.

@nikolaskhodov
Last active December 8, 2020 13:13
Show Gist options
  • Select an option

  • Save nikolaskhodov/7c8c42b1f5ec7297a1a2a372474f189c to your computer and use it in GitHub Desktop.

Select an option

Save nikolaskhodov/7c8c42b1f5ec7297a1a2a372474f189c to your computer and use it in GitHub Desktop.
Log all DOM events
logAllEvents(
el,
options = {
excludeEvents: ['mousemove', 'mouseover', 'mouseout'],
onlyEvents: [],
capture: false,
id: ''
}
) {
const watchedEventTypes = [
'mousedown',
'mouseup',
'click',
'dblclick',
'mousemove',
'mouseover',
'mouseout',
'mousewheel',
'keydown',
'keyup',
'keypress',
'textInput',
'touchstart',
'touchmove',
'touchend',
'touchcancel',
'resize',
'scroll',
'zoom',
'focus',
'blur',
'select',
'change',
'submit',
'reset',
'load',
'unload',
'abort',
'error',
'select',
'change',
'submit',
'reset',
'focus',
'blur',
'resize',
'scroll',
'search',
'devicemotion',
'deviceorientation'
]
.filter((eventType) => {
if (!options?.onlyEvents) {
return true;
}
return options.onlyEvents.includes(eventType);
})
.filter(
(eventType) => !(options?.excludeEvents || []).includes(eventType)
);
const bubbleListeners = watchedEventTypes.map((eventType) => ({
listener: (event) =>
console.log(
`[${options?.id || ''}] capture = false type = ${eventType}`,
event
),
eventType
}));
const captureListeners = watchedEventTypes.map((eventType) => ({
listener: (event) =>
console.log(
`[${options?.id || ''}] capture = true type = ${eventType}`,
event
),
eventType
}));
if (options?.capture === true) {
captureListeners.forEach(({ listener, eventType }) =>
el.addEventListener(eventType, listener, true)
);
}
bubbleListeners.forEach(({ listener, eventType }) =>
el.addEventListener(eventType, listener, false)
);
return () => {
if (options?.capture === true) {
captureListeners.forEach(({ listener, eventType }) =>
el.removeEventListener(eventType, listener, true)
);
}
bubbleListeners.forEach(({ listener, eventType }) =>
el.removeEventListener(eventType, listener)
);
};
}
u = logAllEvents(document.body, {
capture: false,
excludeEvents: ['mousemove', 'mouseout', 'mouseover']
});
u();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment