Ich hatte gehofft, ein Steuerelement zu erstellen, mit dem ein Benutzer in ein Div klicken, dann die Maus ziehen und dann die Maus loslassen kann, um anzuzeigen, wie lange er etwas haben möchte. (Dies ist für ein Kalendersteuerelement vorgesehen, sodass der Benutzer die zeitliche Länge eines bestimmten Ereignisses angibt.)
Es sieht so aus, als ob der beste Weg, dies zu tun, darin besteht, ein "Mousedown" -Ereignis auf dem übergeordneten Div zu registrieren, das wiederum ein "Mousemove" -Ereignis auf dem Div registriert, bis ein "Mouseup" -Ereignis ausgelöst wird. Die Ereignisse "Mousedown" und "Mouseup" definieren den Beginn und das Ende des Zeitbereichs. Wenn ich "Mousemove" -Ereignisse verfolge, kann ich die Größe des Bereichs dynamisch ändern, damit der Benutzer sehen kann, was er tut. Ich habe dies darauf basiert, wie Ereignisse in Google Kalender erstellt werden.
Das Problem, das ich habe, ist, dass das jQuery-Ereignis nur zuverlässige Mauskoordinateninformationen in Bezug auf die gesamte Seite liefert. Gibt es eine Möglichkeit zu erkennen, welche Koordinaten sich auf das übergeordnete Element beziehen?
Bearbeiten:
Hier ist ein Bild von dem, was ich versuche zu tun:
quelle
offset()
ist auch relativ. Wenn also der Elternteil ein Kind eines anderen Elements ist, führt dies zu einem falschen Ergebnis. Verwenden Sieposition()
stattdessen.So ermitteln Sie die Position des Klicks relativ zum aktuell angeklickten Element
Verwenden Sie diesen Code
quelle
var y = e.pageY - $(this).offset().top;
Aber deine Antwort hat mich auf den richtigen Weg geführt.Ich benutze diesen Code, es ist ganz nett :)
quelle
@AbdulRahim Antwort ist fast richtig. Aber ich schlage die folgende Funktion als Ersatz vor (als weitere Referenz):
quelle
Diese Lösung unterstützt alle gängigen Browser einschließlich IE. Es kümmert sich auch um das Scrollen. Zunächst wird die Position des Elements relativ zur Seite effizient und ohne Verwendung einer rekursiven Funktion abgerufen. Dann erhält es das x und y des Mausklicks relativ zur Seite und führt die Subtraktion durch, um die Antwort zu erhalten, bei der es sich um die Position relativ zum Element handelt (das Element kann beispielsweise ein Bild oder ein Div sein):
quelle
Wenn Sie Ihr übergeordnetes Element auf "Position: relativ" setzen, ist es das "übergeordnete Element" für das Material, über das Sie Mausereignisse verfolgen. Somit ist die jQuery "position ()" relativ dazu.
quelle
"position:relative"
. Die jQuery-Position würde dann ihre Positionen relativ zum übergeordneten Element und nicht zur Seite melden. Der Wortlaut meiner Antwort ist schlecht, er impliziert, dass er in direktem Zusammenhang mit Pointys Lösung steht, aber er ist eine Methode zur Berechnung des Versatzes, wenn Sie nicht von den Stilattributen des übergeordneten Elements abhängen können oder wollen.Hier ist eine, die Ihnen auch die prozentuale Position des Punktes gibt, falls Sie ihn benötigen. https://jsfiddle.net/Themezly/2etbhw01/
quelle
Ich würde dies vorschlagen:
quelle