Servus!
Hallo Matthias,
zum Thema Drag und Drop: Das Wiki zitiert einen ziemlich unflätigen Peter-Paul Koch, dass drag und dragover das Gleiche seien, und empfiehlt dann, dass man dragover nicht nutzen solle.
Es brummt der A-Bär: Entweder verstehe ich da was grundsätzlich falsch, oder PPK hat sich in seinem Zorn schwer vergaloppiert. ODER aber er moppert nur dann zu Recht, wenn mal ein Browser das dropzone Attribut implementiert.
Ich kann nur sagen: 2015! Da hab ich versucht, das Wiki zu füllen. Sorry! Gerade bei Drag und drop gab es viele Teaser-Artikel und eigentlich keinen Anwendungszweck (außer D&D bei File-Upload).
Wsl. hat PPK da eben auch auf die Schnelle etwas versucht und ist am Fehlen des dropzone-Attributs gescheitert.
Denn es gibt zwei entscheidendende Unterschiede: Das Event Target. Beim drag Event ist das Target das bewegte Element. Und bei dragover ist des das Element, über dem man gerade mit dem bewegten Element schwebt. Das ist ein entscheidender Unterschied, denn in dragover kann ich prüfen, ob auf diese Weise kann ich prüfen, ob ich gerade über einem drop-fähigen Element schwebe (mangels droppable-Attribut) und entsprechend den dropEffect setzen. In dragstart und dragenter gelingt mir das nicht.
Hinzu kommt: Ohne einen preventDefault-Aufruf im dragover Event ist es unmöglich, irgendwas zu droppen. Der Mauszeiger bleibt auf "Stop". Die Frickl-Beispiele machen das ebenfalls.
Also - PPK redete Unfug und der wurde unreflektiert nachgeplappert, oder ich plappere hier unverstandenen Käu daher. Was ist richtig?
Ja, ich habe deine Erkenntnisse in den Artikel integriert:
Die ersten 2 Beispiele sind aktualisiert; bei den Drag-Events muss wsl. noch etwas erklärt werden.
Das (sinnfreie) Beispiel mit den Kugeln steht als "muss überarbeitet werden" unten drunter.
Vor allem kann man die Kugeln( p-Absätze) nicht nur in die div-Elemente ablegen, sondern auch in die p-Absätze?!?
[EDIT] Ein paar Zeilen weiter steht's: "Ist Ihnen aufgefallen, dass man im oberen Beispiel eine Kugel auch innerhalb einer anderen Kugel ablegen konnte? Das lag nur daran, dass in der Funktion ablegen() das target nicht explizit auf das div eingestellt worden war - was sich mit zwei zusätzlichen Zeilen problemlos beheben lässt:"
Das ändert nichts am fehlenden Sinn. Eigentlich müsste man hier schon ein kleines Rätsel stellen.
[/EDIT]
Es bleibt viel zu tun!
(Ich kümmer mich jetzt mal um das Zahlenspiel "Sum-Up")
Herzliche Grüße
Matthias Scharwies
Einfach mal was von der ToDo-Liste auf die Was-Solls-Liste setzen.“