Skip to content

Instantly share code, notes, and snippets.

@oslego
Created November 1, 2013 13:25
Show Gist options
  • Save oslego/7265412 to your computer and use it in GitHub Desktop.
Save oslego/7265412 to your computer and use it in GitHub Desktop.
//
// returns a list of all elements under the cursor
//
function elementsFromPoint(x,y) {
var elements = [], previousPointerEvents = [], current, i, d;
// get all elements via elementFromPoint, and remove them from hit-testing in order
while ((current = document.elementFromPoint(x,y)) && elements.indexOf(current)===-1 && current != null) {
// push the element and its current style
elements.push(current);
previousPointerEvents.push({
value: current.style.getPropertyValue('pointer-events'),
priority: current.style.getPropertyPriority('pointer-events')
});
// add "pointer-events: none", to get to the underlying element
current.style.setProperty('pointer-events', 'none', 'important');
}
// restore the previous pointer-events values
for(i = previousPointerEvents.length; d=previousPointerEvents[--i]; ) {
elements[i].style.setProperty('pointer-events', d.value?d.value:'', d.priority);
}
// return our results
return elements;
}
@euglv
Copy link

euglv commented Nov 21, 2024

No need to emulate document.elementsFromPoint() for Internet Explorer, as it have this method prefixed:

 document.msElementsFromPoint(x, y)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment