Сравнить элементы HTML по фактическому z-индексу

Если в одном документе использовать два HTML-элемента A и B, как узнать, какой из них «ближе»? пользователю (т. е. если они перекрывают друг друга, какой из них скрывает другой)?

W3C CSS Спецификация описывает контексты стека, которые должны реализовывать совместимые механизмы рендеринга. Однако я не смог найти способ получить доступ к этой информации в программе на JavaScript, в кросс-браузерах или нет. Все, что я могу прочитать, это CSSz-index свойство, которое само по себе не говорит много, так как большую часть времени установлено наauto или даже если оно выражено в виде числового значения, оно не является надежным индикатором того, как оно фактически отображается (если они относятся к разным контекстам отслеживания, сравнение z-индексов не имеет значения).

Обратите внимание, что я заинтересован вarbitrary элементы: если оба элемента находятся ниже указателя мыши, будет считаться только один "hovered", поэтому в этом случае я легко могу найти ближайший. Однако я ищу более общее решение, предпочтительно такое, которое не включает повторную реализацию алгоритма стека, который уже выполняет механизм рендеринга.

Update: позвольте мне немного пояснить причину этого вопроса: я недавно решилвопрос который выставил ограничение в механизме перетаскивания jQuery - он не учитывает z-индексы при отбрасывании, поэтому, если элемент скрывает другой, он все равно может выполнить операцию удаления в элементе, который находится «позади»; , Хотя на связанный вопрос был дан ответ для конкретного случая ФП, общая проблема сохраняется, и я не знаю простого решения, о котором я знаю.

ответ Алекса ниже полезно, но недостаточно для рассматриваемого случая: при перетаскивании сам перетаскиваемый элемент (или, точнее, его помощник) является самым верхним элементом под курсором мыши, поэтомуelementFromPoint вернусьit вместоnext самый верхний элемент, который нам действительно нужен (workaround: стиль курсора так что он находится вне помощника). Другие стратегии пересечения, которые использует jQuery, также учитывают не только одну точку, что усложняет задачу определения самого верхнего элемента, который каким-то образом пересекает помощника. Возможность сравнивать (или сортировать) элементы по фактическому z-индексу обеспечит «осведомленность о z-индексе». Режим пересечения жизнеспособен для общего случая.

Ответы на вопрос(3)

Ваш ответ на вопрос