Das Problem, das ich zu lösen versuche, ist "Was ist an dieser Stelle?"
Es ist ziemlich trivial, die x / y-Position (Offset) eines DIV zu bekommen, aber was ist mit der Umkehrung? Wie erhalte ich die ID eines DIV (oder eines beliebigen Elements) mit einer x / y-Position?
Leider wird das Auslösen eines hergestellten / simulierten Mausereignisses nicht funktionieren, da Sie beim Senden ein Zielelement angeben müssen. Da dieses Element derjenige ist, den du herausfinden willst, kannst du es nur auf dem Körper verteilen, als ob es bereits durchgebrannt wäre.
Sie müssen es wirklich selbst tun, indem Sie manuell die Elemente durchgehen, an denen Sie interessiert sind, und ihre Position / Größe / zIndex mit Ihrem x / y-Punkt vergleichen und sehen, ob sie sich überlappen. Außer in IE und neuerdings FF3, wo Sie
verwenden können %Vor%Siehe
Erstellen Sie einen Mausereignis-Listener und lösen Sie an dieser Stelle ein Mausereignis aus. Dies sollte Ihnen den gesamten Stapel von Elementen an diesem Ort geben.
Oder sehen Sie sich die Quelle von Firebug an.
Wenn Sie nur die X- und Y-Position haben (und Sie können die Mausbewegung nicht verfolgen, wie Sie es erwähnt haben), müssen Sie das DOM durchlaufen und durch jeden DIV laufen. Für jeden DIV müssen Sie seine X- und Y-Koordinaten mit denen vergleichen, die Sie haben. Dies ist eine teure Operation, aber es ist der einzige Weg. Ich schlage vor, dass Sie besser Ihr Problem überdenken sollten, anstatt eine Lösung dafür zu finden.
Verwenden Sie einen JQuery-Selektor, um die Liste aller DIVs nach einer zu filtern, die Ihren Positionskriterien entspricht?
Eine Option besteht darin, ein Array von "Div-Dimension" -Objekten zu erstellen. (Nicht zu verwechseln mit den divs selbst ... IE7 perf ist frustrierend, wenn Sie Dimensionen vom Objekt lesen.)
Diese Objekte bestehen aus einem Zeiger auf das div, deren Dimensionen (vier Punkte ... sagen oben, links, unten und rechts) und möglicherweise ein schmutziges Bit. (Dirty bit wird nur benötigt, wenn sich die Größe ändert.
Sie könnten dann das Array durchlaufen und die Dimensionen überprüfen. Es erfordert O (n), dies bei jeder Mausbewegung zu tun. Sie könnten etwas besser mit einer binären Suchmethode umgehen ... vielleicht.
Wenn Sie einen binären Suchstil verwenden, besteht eine Möglichkeit darin, vier Arrays zu speichern. Jeder mit einem einzelnen Punkt der Dimension und dann binäre Suche auf allen vier. O (4logn) = O (logn).
Ich sage nicht, dass ich irgendwelche davon empfehle, aber sie könnten funktionieren.
Ich denke, John sagt, dass Sie document.createEvent () verwenden können, um einen Mauszeiger an der gewünschten Stelle zu simulieren. Wenn Sie dieses Ereignis erfassen, indem Sie dem Body einen eventlistener hinzufügen, können Sie sich das event.target anschauen und sehen, welches Element sich an dieser Stelle befand. Ich bin mir nicht sicher, in welchem Maße IE diese Methode unterstützt, vielleicht weiß jemand anderes?
Aktualisierung: Hier ist ein jquery-Plugin, das Ereignisse simuliert:
Das ist vielleicht etwas zu prozessorintensiv, aber wir gehen über die gesamte Liste der div-Elemente auf einer Seite, finden deren Positionen und Größen und testen dann, ob sie sich unter der Maus befinden. Ich glaube nicht, dass ich das in einem Browser tun möchte.
Es ist möglicherweise effizienter, den DOM-Baum beim Laden der Seite einmal zu durchlaufen, die Positionen und Größen aller Elemente zu ermitteln und sie in einem Array / Hash / etc zu speichern. Wenn Sie die Datenstruktur gut entwerfen, sollten Sie in der Lage sein, ein Element an den gegebenen Koordinaten ziemlich schnell zu finden, wenn Sie es später brauchen.
Überlegen Sie, wie oft Sie ein Element erkennen müssen und vergleichen Sie dies mit der Häufigkeit, mit der sich die Elemente auf der Seite ändern. Sie würden die Anzahl von Malen balancieren, die Sie alle Elementpositionen neu berechnen müssen (eine teure Berechnung) gegen die Anzahl, wie oft Sie die berechnete Information tatsächlich verwenden (relativ billig, hoffe ich).
Danke MattMitchell. Ich wünschte, es wäre so einfach - ich weiß schon, wie man die Position eines DIV bekommt - das ist ein wenig komplizierter.
Nick und John - Leider kann ich die Mausposition nicht verwenden.
Ich denke, dass die Lösung das Erstellen einer Logik beinhaltet, die die Position einnimmt, etwas Mathematik macht und die DIV-ID ausgibt. Sieht so aus, als ob es keine einfache Antwort gibt.
Tags und Links javascript