2009-04-08 8 views
2

Ich kann ein Objekt bekommen, wenn es maused ist. Ich kann jederzeit die Koordinaten der Maus abrufen. Wie bekomme ich ein Objekt mit seinen Koordinaten - wenn sie sich von der Maus unterscheiden?raise javascript events oder erhalte ein Objekt von XY coords

Im Wesentlichen wird der Benutzer ein div an einer bestimmten Stelle auf dem Bildschirm fallen lassen. Da das div breiter als der Mauszeiger ist, muss ich wissen, welches Objekt die Ecke des div ist (nicht das, worüber die Maus ist). Gibt es eine Möglichkeit, ein Mousemove-Ereignis in JS auszulösen - ihm die Koordinaten zu geben?
Dank


Nur eine kurze Nachschrift für andere, die diesen Artikel lesen. Obwohl ich die Antwort nicht für meine Antwort gewählt habe, könnte es die Antwort für dich sein. Dies scheint eine sehr flexible, funktionsreiche Lösung für viele der clientseitigen Tools zu sein, die wir anbieten möchten.

Antwort

1

Es gibt keine Möglichkeit, eine mousemove- zu erhöhen und haben es in den sich ergebenden Zielelementeigenschaften zu füllen, nein.

Es gibt eine Möglichkeit, ein Element aus beliebigen Koordinaten zu erhalten, aber Sie werden es nicht sehr mögen. Es geht darum, über jedes Seitenelement zu gehen und seine Dimensionen zu berechnen (aus offsetLeft/Top/Parent) und welche Elemente die anderen Elemente überlagern (aus den berechneten Stilen "position" und "z-index") ... im Wesentlichen einen Teil von die eigene Layout-Engine des Browsers im Skript. Und wenn Sie Elemente mit 'Überlauf' scroll/auto haben, müssen Sie noch mehr berechnen.

Wenn Sie einen begrenzten Fall haben (z. B. können Sie das Div nur irgendwo unter eine Reihe von anderen statisch positionierten divs fallen lassen), kann es überschaubar sein, aber der allgemeine Fall ist ziemlich hart und in keiner Weise Spaß. (Vielleicht hat jemand irgendwo ein solches Feature in ein Bibliotheks- oder Framework-Plug-in gepackt, aber ich habe es noch nicht gefunden.)

Wenn Sie einen anderen Weg finden können, Ihr Drag'n'Drop sich so zu verhalten, dass es nicht funktioniert Du musst das tun, dann tu das!

+0

Ich hatte davor Angst. Es sieht so aus, als wäre jQuery "diese" Bibliothek. Ich werde weiter posten, wenn ich es herausfinde. – Praesagus

+0

jQuery Core tut es nicht. Vielleicht gibt es irgendwo ein jQuery-Plugin, das ich natürlich noch nicht gesehen habe ... Happy Hunting! – bobince

+0

jquerys ui Kern tut es. Leider musste ich mir ein paar zusätzliche Funktionen zulegen. Um die Suche zu beschleunigen, schaute ich zuerst durch die großen Objekte (z. B. Tabellen) und dann, wenn der Klick innerhalb dieses Elements war, durch seine Kinder.Es tut weh, aber es funktioniert und es ist schnell. Danke – Praesagus

1

Sie beantworten Ihre Frage nicht direkt, aber haben Sie versucht, eine JavaScript-Bibliothek wie jQuery UI zu verwenden? Es bietet eine gute Drag/Drop-Unterstützung & Sie können die Art von Dingen tun, über die Sie sprechen ... z. Sie können bestimmte Elemente Ihrer Seite ziehbar machen & andere droppable & dann die Ereignisse behandeln, wenn der Benutzer ein Element umherzieht. Es bietet eine Toleranz für die Dropables, die 'touch' (sowie 'fit', 'intersect', 'pointer') enthält, so dass Sie das 'over' Event Ihrer Dropable-Ziele behandeln könnten & Sie würden ein Event bekommen Handler, der ausgelöst wird, wenn die Ecke Ihres Div sich über einem bestimmten Element befindet. Dieser Event-Handler gibt Ihnen einen Verweis auf das Element, das gezogen wird, sowie auf das Element, über das es gezogen wird. (ein bisschen zurück zu, wie Sie die Frage gestellt haben, aber sollte in der Lösung der gleichen Probleme verwendbar sein).

Hoffnung, dass eine Hilfe ist ...

+0

Dies kann meine Lösung sein, ich werde es untersuchen und wenn ja, wählen Sie Ihre als Antwort. – Praesagus

0

Um ein Objekt von seinen Koordinaten zu erhalten, gibt es document.elementFromPoint(x,y). Quirksmodes compatibility table zeigt, dass es in den neuesten Browsern verfügbar ist.

Verwandte Themen