Frage

Ist es möglich, die Positionierung des Avatars mit Dojo Toolkit dnd api zu ändern? Im Moment beim Ziehen, der Avatar des gezogenen Artikel erscheint rechts und unterhalb des Mauszeigers. Ich will es in der gleichen Position wie das Maus-Cursor sein. Ich lief einige Usability-Tests auf meiner Anwendung, und die meisten Menschen scheinen zu versuchen, den Avatar in den Ablegebereich, um zu versuchen und ziehen, wie zum Bewegen des Cursors über den Ablegebereich gegenüber. Jede Eingabe wäre schön. Dank!

War es hilfreich?

Lösung

Leider nicht aus technischen Gründen.

UPDATE: durch populäre Forderungen sind dies technische Gründe:

  • Wenn Sie einen Knoten direkt unter der Maus haben, der Knoten erhält alle Mausereignisse.
  • Die Mausereignisse sprudeln die Elternkette.
  • Nun stell dir vor, dass Sie diesen Knoten mit der Maus verschieben -. Dieser Knoten immer alle Mausereignisse bekommen würde
  • Es bedeutet, dass irgendein anderer Knoten, zum Beispiel kann ein Ziel keine Mausereignisse bekommen, wenn es ein Elternteil des bewegten Knotens ist. Normalerweise ist dies nicht der Fall ist.

Aber ich weiß, dass andere Leute es tun können! Es sollte möglich sein! Ja, es ist möglich ... im Prinzip:

  • Lassen Sie uns alle Zielknoten registrieren.
  • Lassen Sie sich relevante Mausbewegungsereignisse direkt auf der obersten Mutter (das Dokument) fängt.
  • Wenn wir eine Drag-Operation erkennen, lassen Sie uns wie folgt vorgehen:
    1. Berechnen Geometrie (Begrenzungskästen) aller Ziele.
    2. Auf jeder Maus bewegen läßt prüfen, ob die aktuelle Mausposition mit einem Ziel überlappt. Bonuspunkte für einen „A +“ Student:. Erkennen Überschneidungen mit anderen Knoten, z.B., wenn ein Ziel aus kosmetischen Gründen teilweise dunkel ist, und verarbeitet diese Situation richtig
    3. Wenn die aktuelle Mausposition mit einem Ziel überlappt, lassen Sie uns initiieren Aktionen „Drop möglich ist“, zum Beispiel einige Hinweise zeigen, so dass der Anwender weiß, dass sie jetzt fallen kann.

Warum Dojo nicht das tun? Für eine Reihe von technischen Gründen (schließlich haben wir dort!):

  • Ein Geometrieberechnungen des Knotens sind notorisch in den meisten Browsern Buggy. Sobald Tabellen beteiligt sind, oder andere nicht-triviale mittels Platzierung, können Sie nicht zu 100% sicher sein, dass der Begrenzungsrahmen korrekt ist.
  • Geometrie Berechnungen ist eine teure Operation, und wir haben es mindestens einmal für alle Ziele auf jedem Drag-Operation zu tun, unter der Annahme, dass keine Änderungen während des Ziehvorgangs ein (nicht immer der Fall ist) erfolgen. Ein Browser kann Knoten Reflow aus vielen Gründen ⇒ können sie verschieben / Größe ändern Ziele vorhanden, so müssen wir wachsam sein.
  • Typischerweise werden die berechneten Boxen in einer Liste ⇒ die Liste für Kreuzungen Überprüfung ist O (n) (linear) ⇒ nicht skaliert und Anzahl der Ziele wachsen.
  • gehalten werden
  • Alle Maus-Event-Handler sollten schnell sein, da sonst eine Maus-Ereignis der Browser-Einrichtung Handhabung kann „gebrochen“, was zu unvorhersehbaren Nebenwirkungen sein. Siehe die vorherigen Punkte für Gründe, warum Mausereignisverarbeitung langsam sein kann.
  • auf der linearen Suche Verbesserung ist möglich, zum Beispiel 2D räumliche Bäume verwendet werden können, aber es führt zu mehr (viel mehr) JavaScript-Code mehr Material ⇒ auf dem Client-Seite ⇒ zum Download der Regel ist es nicht wert.

Wie kann ich wissen, dass? Da Dojo verwendet diese Art von Drag & Drop in früheren Versionen haben, und wir haben krank und müde kämpfen Probleme, die ich oben beschrieben. Jede Verbesserung war ein harter Kampf, der die Codegröße erhöht. Schließlich entschieden wir uns gegen neu zu erfinden und in einem Browser-Mechanismen bereits gebaut zu replizieren. Ein Browser hat praktisch die gleiche Arbeit. Berechnet Geometrie des Knoten, findet den darunter liegenden Knoten, und löst ein Mausbewegungsereignis angemessen

Die aktuelle Implementierung keine Mausbewegungsereignisse verwenden und nicht die Geometrie berechnen. Stattdessen setzt sie auf die Maus über / aus durch Ziele erfassten Ereignisse nach einer Drag gestartet wurde. Es funktioniert zuverlässig und skaliert gut.

Ein weiteres Falten in dieser Geschichte: Dojo Ziele als Container behandelt - ein sehr häufiger Anwendungsfall (Einkaufswagen, Elemente neu anordnen, Bearbeitung Hierarchien). Linear Container und allgemeine Bäume werden zur Zeit durchgeführt, individuelle Behälter sind möglich. Beim Ziehen und Ablegen können Sie sehen und Drop gezogene Elemente in einer geeigneten Position innerhalb eines Zielbehälters, zum Beispiel sich zwischen vorhandenen Elementen einzufügen. Die Implementierung dieser Funktion geometrische Berechnungen und Prüfungen unter Verwendung wäre unerschwinglich teuer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top