6.1 Element och händelser för drag-and-drop
I en operation med drag-and-drop har man element som kan dras och andra element som är s.k. "drop zones", där man kan släppa de element som dras. För dessa två typer av element finns olika händelser som inträffar. Detta exempel illustrerar hur elementen hanteras och vilka händelser som inträffar. Exemplet är uppdelat i följande tre delar:
- Demo av vilka element och händelser som är inblandade under drag-and-drop.
- Alternativ 1 för struktur av koden för drag-and-drop.
- Alternativ 2 för struktur av koden för drag-and-drop.
Det finns olika sätt att implementera drag-and-drop och det som tas upp i detta och kommande exempel i denna avdelning är den metod som kom i samband med att HTML5 utvecklades. Därför kallas metoden ibland för "HTML5-metoden", men en mer formell benämning är "HTML drag and drop API". De händelser som inträffar är kopplade till drag-and-drop med musen, så det fungerar endast på en dator med mus. Andra metoder och hur man implementerar det på en touch screen kommer i en senare avdelning i denna exempelsamling.
28 min.
Sammanfattning
- Elementen som kan dras:
- För de element som dras finns händelserna
dragstart
,drag
ochdragend
. Händelsernadragstart
ochdragend
inträffar en gång i början respektive slutet av hela operationen. Händelsendrag
inträffar hela tiden medan man drar, men oftast använder man inte denna händelse. - För de element som ska kunna dras, sätter man egenskapen
draggable
tilltrue
. För element som har en händelsehanterare fördragstart
, men som man inte vill ska kunna dras, sätter mandraggable
tillfalse
. - En markerad text har som standard att den kan dras. Vill man förhindra att text kan markeras, kan man i CSS-koden använda
user-select: none
.
- För de element som dras finns händelserna
- Drop zones, dvs elementen där man ska kunna släppa:
- För de element som är "drop zones" finns händelserna
dragover
,dragenter
,dragleave
ochdrop
. - Händelsen
dragover
inträffar hela tiden medan man drar över en drop zone. Har man även en händelsehanterare fördrag
, inträffar bådedragover
ochdrag
omväxlande. - Man måste ha med en händelsehanterare för
dragover
, där man användere.preventDefault()
. I annat fall kommer inte händelsendrop
inträffa.
- För de element som är "drop zones" finns händelserna
- Om vi utesluter
drag
är ordningen för händelsernadragstart
-dragenter
-dragover
- ... -dragover
- (dragleave
ellerdrop
) -dragend
. Släpper man elementet på en drop zone, inträffardrop
, men intedragleave
. Om man istället drar bort elementet från drop zone, innan man släpper det, inträffardragleave
, men intedrop
. - Event-objektet i händelsehanterarna för
dragstart
,drag
ochdragend
innehåller information om det element som dras, medan det i händelsehanterarna fördragover
,dragenter
,dragleave
ochdrop
innehåller information om det element som man släppt på.
Egna övningar
Övningar på detta kommer i nästa exempel.