Drag and drop (tradotto in italiano con trascinamento)[1] nel lessico informatico, indica una successione di tre azioni, consistenti nel cliccare su un oggetto virtuale (quale una finestra o un'icona) per trascinarlo (in inglese: drag) in un'altra posizione, dove viene rilasciato (in inglese: drop). Generalmente nella lingua italiana tale azione viene indicata semplicemente con "trascina" oppure con "clicca e trascina", anche se la traduzione letterale è "trascina e rilascia".
In genere, questo tipo di azione crea un qualche tipo di associazione tra due oggetti: se per esempio un'icona corrispondente a un documento viene trascinata sul cestino, questo provoca la cancellazione del documento.
Spesso ad azioni di drag and drop corrispondono alternative via tastiera (scorciatoie o shortcut) o via comandi testuali da inserire in una console; ad esempio in un sistema Microsoft Windows lo spostamento di un file nel cestino corrisponde alla pressione del tasto di cancellazione.
In HTML un drag and drop base si può creare come di seguito[5]:
<!DOCTYPE HTML><html><head><style>#div1{width:350px;height:70px;padding:10px;border:1pxsolid#aaaaaa;}</style><script>functionallowDrop(ev){ev.preventDefault();}functiondrag(ev){ev.dataTransfer.setData("text",ev.target.id);}functiondrop(ev){ev.preventDefault();vardata=ev.dataTransfer.getData("text");ev.target.appendChild(document.getElementById(data));}</script></head><body><p>Trascina l'immagine nel rettangolo</p><divid="div1"ondrop="drop(event)"ondragover="allowDrop(event)"></div><br><imgid="drag1"src="img_logo.gif"draggable="true"ondragstart="drag(event)"width="336"height="69"></body></html>
Il trascinamento della selezione HTML utilizza DOM event model e drag events ereditato da mouse events. Durante le operazioni di trascinamento, vengono attivati diversi tipi di eventi JavaScript[6]:
Evento
Sul gestore di eventi
Si attiva quando ...
drag
ondrag
… viene trascinato un elemento (elemento o selezione di testo).
dragend
ondragend
... un'operazione di trascinamento termina (come il rilascio di un pulsante del mouse o il tasto Esc).
dragenter
ondragenter
... un elemento trascinato entra in un obiettivo di rilascio valido.
dragexit
ondragexit
... un elemento non è più l'obiettivo di selezione immediata dell'operazione di trascinamento.
dragleave
ondragleave
... un elemento trascinato lascia un obiettivo di rilascio valido.
dragover
ondragover
... un elemento trascinato viene trascinato su un obiettivo di rilascio valido, ogni poche centinaia di millisecondi.
dragstart
ondragstart
... l'utente inizia a trascinare un elemento.
drop
ondrop
... un elemento viene rilasciato su un obiettivo di rilascio valido.