Per
drag and drop s’intende la possibilità, per un programmatore che sta progettando un software dotato di interfaccia grafica, di far diventare un widget una sorgente di un’operazione di trascinamento (
drag), oppure destinatario di un’operazione di rilascio (
drop). Nella pratica, esso è effettuato compiendo le seguenti azioni:
- si clicca con il pulsante sinistro del mouse sull’elemento sorgente del drag (starting point);
- se l’elemento è non testuale lo si trascina direttamente, sempre tenendo premuto il pulsante sinistro del mouse;
- se l’elemento è testuale, dapprima si seleziona un’area d’interesse, e poi la si trascina sempre tenendo premuto il pulsante sinistro del mouse;
- si posiziona l’elemento oggetto del trascinamento su di un altro elemento destinatario del drop (end point), rilasciando il pulsante sinistro del mouse.
Il meccanismo precedentemente descritto è, però, sempre stato una prerogativa dello sviluppo di applicazioni client native, non essendoci mai state per il Web delle specifiche e delle implementazioni standard. Fortunatamente, con l’avvento di HTML5, è stata definita
un’API nativa per il
supporto al drag&drop, che permette finalmente di dotare le applicazioni web di questo potente meccanismo senza dover utilizzare librerie o framework JavaScript esterni e tra di loro incompatibili.
Grazie a questa libreria possiamo, in breve, rendere sorgente del
drag o destinatario del
drop qualunque elemento HTML e di compiere, pertanto, le consuete operazioni di trascinamento e rilascio, sia all’interno della finestra dove sono stati definiti tali elementi, sia con altre finestre del browser stesso, o appartenenti ad altre applicazioni client native. Illustriamo, dunque, le seguenti operazioni da compiere che ci consentiranno di utilizzare il
drag and drop:
- impostazione dell’attributo draggable con il valore true per gli elementi HTML che vogliamo rendere trascinabili. Esso non deve essere specificato per gli elementi a (link), img (le immagini) e i nodi di testo, che di default sono già draggabili e sono già dotati di un comportamento predefinito nell’interazione con altri elementi durante un’operazione di rilascio;
- gestione di un evento dragstart, che viene generato quando ha inizio l’operazione di trascinamento, al fine di scegliere il dato da trasferire, un’eventuale immagine di feedback e l’effetto dell’operazione di trascinamento;
- gestione di un evento drag, che viene generato durante l’operazione di trascinamento, al fine di fornire informazioni utili durante la predetta fase di dragging;
- gestione di un evento dragenter, che viene generato durante l’operazione di trascinamento se il puntatore del mouse si trova, per la prima volta, all’interno di un’area di un possibile elemento destinatario del drop. Il suo handler è utilizzabile al fine di verificare se il drop è fattibile sull’elemento target e per fornire un’immagine di feedback;
- gestione di un evento dragover, che viene generato durante l’operazione di trascinamento se il puntatore del mouse si muove su di un elemento target, al fine di fornire informazioni quali, ad esempio, la posizione del mouse all’interno dell’area dell’elemento. Il gestore di tale evento deve però prevenire la sua azione di default, tramite la funzione preventDefault, al fine di evitare il divieto del drop. In pratica, possiamo dire, che l'assegnamento di questo evento su di un elemento lo indica come possibile destinatario di un drop;
- gestione di un evento dragleave, che viene generato durante l’operazione di trascinamento, se il puntatore del mouse esce dall’area dell’elemento target o se è rilasciato. L’handler è utilizzabile al fine di rimuovere informazioni o immagini di feedback eventualmente visualizzate;
- gestione di un evento drop, che viene generato all’atto del rilascio dell’elemento trascinato, al fine di ottenere o posizionare ciò che è stato l’oggetto del trasferimento;
- gestione di un evento dragend, che viene generato al termine dell’operazione di dragging, al fine, ad esempio, di rimuovere dalla posizione originaria l’elemento sorgente trascinato.
- Pubblicazioni correlate:
- 10-05-2010 Guida ad HTML5: storia della sua nascita (1/3)
- 11-05-2010 Guida ad HTML5: storia della sua nascita (2/3)
- 17-05-2010 Guida ad HTML5: storia della sua nascita (3/3)
- 18-05-2010 Guida ad HTML5: supporto dei browser (1/6)
- 24-05-2010 Guida ad HTML5: supporto dei browser (2/6)
- 25-05-2010 Guida ad HTML5: supporto dei browser (3/6)
- 31-05-2010 Guida ad HTML5: supporto dei browser (4/6)
- 01-06-2010 Guida ad HTML5: supporto dei browser (5/6)
- 07-06-2010 Guida ad HTML5: supporto dei browser (6/6)
- 08-06-2010 Guida ad HTML5: l'elemento canvas, l'area del disegno
- 14-06-2010 Guida ad HTML5: l’elemento canvas, disegno di forme geometriche (1/4)
- 18-06-2010 Guida ad HTML5: l’elemento canvas, disegno di forme geometriche (2/4)
- 21-06-2010 Guida ad HTML5: l’elemento canvas, disegno di forme geometriche (3/4)
- 25-06-2010 Guida ad HTML5: l’elemento canvas, disegno di forme geometriche (4/4)
- 28-06-2010 Guida ad HTML5: l’elemento canvas, immagini e testo (1/4)
- 02-07-2010 Guida ad HTML5: l’elemento canvas, immagini e testo (2/4)
- 05-07-2010 Guida ad HTML5: l’elemento canvas, immagini e testo (3/4)
- 09-07-2010 Guida ad HTML5: l’elemento canvas, immagini e testo (4/4)
- 12-07-2010 Guida ad HTML5: l’elemento canvas, manipolazione diretta dei pixel (1/2)
- 16-07-2010 Guida ad HTML5: l’elemento canvas, manipolazione diretta dei pixel (2/2)
- 19-07-2010 Guida ad HTML5: l’elemento canvas, sfumature
- 23-07-2010 Guida ad HTML5: l’elemento canvas, ombreggiature
- 26-07-2010 Guida ad HTML5: l’elemento canvas, compositing (1/2)
- 30-07-2010 Guida ad HTML5: l’elemento canvas, compositing (2/2)
- 30-08-2010 Guida ad HTML5: l’elemento canvas, stili di linea e pattern (1/2)
- 03-09-2010 Guida ad HTML5: l’elemento canvas, stili di linea e pattern (2/2)
- 06-09-2010 Guida ad HTML5: multimedialità, concetti propedeutici (1/2)
- 10-09-2010 Guida ad HTML5: multimedialità, concetti propedeutici (2/2)
- 13-09-2010 Guida ad HTML5: multimedialità, l'elemento video
- 17-09-2010 Guida ad HTML5: multimedialità, gli elementi audio e source
- 20-09-2010 Guida ad HTML5: multimedialità, scripting dei media element (1/6)
- 24-09-2010 Guida ad HTML5: multimedialità, scripting dei media element (2/6)
- 27-09-2010 Guida ad HTML5: multimedialità, scripting dei media element (3/6)
- 01-10-2010 Guida ad HTML5: multimedialità, scripting dei media element (4/6)
- 04-10-2010 Guida ad HTML5: multimedialità, scripting dei media element (5/6)
- 08-10-2010 Guida ad HTML5: multimedialità, scripting dei media element (6/6)
- 11-10-2010 Guida ad HTML5: multimedialità, realizzazione di un player video (1/7)
- 15-10-2010 Guida ad HTML5: multimedialità, realizzazione di un player video (2/7)
- 20-10-2010 Guida ad HTML5: multimedialità, realizzazione di un player video (3/7)
- 22-10-2010 Guida ad HTML5: multimedialità, realizzazione di un player video (4/7)
- 25-10-2010 Guida ad HTML5: multimedialità, realizzazione di un player video (5/7)
- 29-10-2010 Guida ad HTML5: multimedialità, realizzazione di un player video (6/7)
- 05-11-2010 Guida ad HTML5: multimedialità, realizzazione di un player video (7/7)
- 08-11-2010 Guida ad HTML5: storage per le web application (1/3)
- 12-11-2010 Guida ad HTML5: storage per le web application (2/3)
- 15-11-2010 Guida ad HTML5: storage per le web application (3/3)
- 19-11-2010 Guida ad HTML5: eseguire codice JavaScript in background (1/3)
- 22-11-2010 Guida ad HTML5: eseguire codice JavaScript in background (2/3)
- 26-11-2010 Guida ad HTML5: eseguire codice JavaScript in background (3/3)
- 29-11-2010 Guida ad HTML5: applicazioni web offline (1/5)
- 03-12-2010 Guida ad HTML5: applicazioni web offline (2/5)
- 06-12-2010 Guida ad HTML5: applicazioni web offline (3/5)
- 10-12-2010 Guida ad HTML5: applicazioni web offline (4/5)
- 13-12-2010 Guida ad HTML5: applicazioni web offline (5/5)
- 17-12-2010 Guida ad HTML5: la geolocalizzazione (1/4)
- 20-12-2010 Guida ad HTML5: la geolocalizzazione (2/4)
- 24-12-2010 Guida ad HTML5: la geolocalizzazione (3/4)
- 27-12-2010 Guida ad HTML5: la geolocalizzazione (4/4)
- 31-12-2010 Guida ad HTML5: microdata (1/4)
- 03-01-2011 Guida ad HTML5: microdata (2/4)
- 10-01-2011 Guida ad HTML5: microdata (3/4)
- 14-01-2011 Guida ad HTML5: microdata (4/4)
- 21-01-2011 Guida ad HTML5: drag and drop (2/5)
- 24-01-2011 Guida ad HTML5: drag and drop (3/5)
- 28-01-2011 Guida ad HTML5: drag and drop (4/5)
- 31-01-2011 Guida ad HTML5: drag and drop (5/5)
- 04-02-2011 Guida ad HTML5: nuovi elementi semantici (1/6)
- 07-02-2011 Guida ad HTML5: nuovi elementi semantici (2/6)
- 11-02-2011 Guida ad HTML5: nuovi elementi semantici (3/6)
- 14-02-2011 Guida ad HTML5: nuovi elementi semantici (4/6)
- 18-02-2011 Guida ad HTML5: nuovi elementi semantici (5/6)
- 21-02-2011 Guida ad HTML5: nuovi elementi semantici (6/6)
- 25-02-2011 Guida ad HTML5: l’API di messaggistica (1/8)
- 28-02-2011 Guida ad HTML5: l’API di messaggistica (2/8)
- 04-03-2011 Guida ad HTML5: l’API di messaggistica (3/8)
- 07-03-2011 Guida ad HTML5: l’API di messaggistica (4/8)
- 11-03-2011 Guida ad HTML5: l’API di messaggistica (5/8)
- 14-03-2011 Guida ad HTML5: l’API di messaggistica (6/8)
- 18-03-2011 Guida ad HTML5: l’API di messaggistica (7/8)
- 21-03-2011 Guida ad HTML5: l’API di messaggistica (8/8)