Sind zwei HTML-Elemente A und B im selben Dokument vorhanden, wie kann ich herausfinden, welcher "näher" am Benutzer ist (dh wenn sie sich überlappen, welcher den anderen verdeckt))HTML-Elemente nach aktuellem Z-Index vergleichen
Die W3C CSS Specification beschreibt Stacking-Kontexte, die konforme Rendering-Engines implementieren sollten. Ich konnte jedoch keine Möglichkeit finden, auf diese Informationen in einem JavaScript-Programm, Cross-Browser oder nicht zuzugreifen. Alles, was ich lesen kann, ist die css z-index
Eigenschaft, die per se nicht viel sagt, da die meiste Zeit auf auto
eingestellt ist, oder, selbst wenn sie als numerischer Wert ausgedrückt wird, ist kein zuverlässiger Indikator dafür, wie sie tatsächlich angezeigt wird (wenn Sie gehören zu verschiedenen Statuskontexten, der Vergleich von Z-Indizes ist irrelevant.
Bitte beachten Sie, dass ich interessiert bin arbitrary elements: Wenn beide Elemente unter dem Mauszeiger sind, wird nur einer als "hovered" betrachtet, so dass ich in diesem Fall leicht den nächsten finden kann. Ich suche jedoch nach einer allgemeineren Lösung, vorzugsweise einer Lösung, bei der der Stapelalgorithmus, den die Rendering-Engine bereits ausführt, nicht erneut implementiert wird.
Update: lassen Sie mich hinter dieser Frage ein wenig den Grund klären: Ich Angriff genommen kürzlich a question, die eine Einschränkung in jQuery Drag-and-Drop-Mechanismus ausgesetzt - es ist nicht z-Indizes nicht berücksichtigt, wenn fallen, so dass, wenn ein Element verdunkelt ein anderes, es kann immer noch die Drop-Operation in dem Element ausführen, das "hinter" ist. Während die verknüpfte Frage für den OP-Einzelfall beantwortet wurde, besteht das allgemeine Problem weiterhin, und es gibt keine einfache Lösung, von der ich weiß.
alex's answer unten ist nützlich, aber nicht genug, um für den Fall auf der Hand: beim Ziehen, das gezogene Element selbst (oder genauer gesagt dessen Helfer) ist das oberste Element unter dem Mauszeiger, so wird elementFromPoint
zurück es anstelle von die nächste obersten Element, das wir wirklich brauchen (Problemumgehung:style the cursor so ist es außerhalb der Helfer platziert). Die anderen Kreuzungsstrategien, die jQuery verwendet, berücksichtigen auch mehr als nur einen Punkt, wodurch die Aufgabe erschwert wird, das oberste Element zu bestimmen, das den Helfer irgendwie schneidet. Die Möglichkeit, Elemente mit dem tatsächlichen Z-Index zu vergleichen (oder zu sortieren), würde einen "z-index-aware" Schnittmodus für den allgemeinen Fall ermöglichen.
Ich werde Ihren Code sorgfältiger testen, wenn ich Zeit habe, aber auf den ersten Blick scheint es in Ordnung zu sein. Ich akzeptiere deine Antwort für jetzt, da es die vollständigste ist, die wir bisher haben. – mgibsonbr