Drag and drop
Segnaposto
Trascina qui l'immagine.
Oppure trascinala qui.
Ecco tutto il codice necessario per questo esempio:
HTML
<div id="origine" ondragover="DragOver(event)" ondrop="Drop(event)">Segnaposto <img src="../photos/ciliege.jpg" draggable="true" id="ciliege" ondragstart="iniziaDrag(event)" width="150px"/></div> <div id="bersaglio" ondragover="DragOver(event)" ondrop="Drop(event)">Trascina qui l'immagine.</div> <div id="bersaglio2" ondragover="DragOver(event)" ondrop="Drop(event)"> Oppure trascinala qui.</div>
CSS
#origine { width:200px; height:200px; position:relative; border:thin solid black; background-color:#af3; float:left; }
#bersaglio { width:270px; height:307px; border:thin solid black; background-color:#ff3; position:relative; float:left; }
#bersaglio2 { width:270px; height:307px; border:thin solid black; background-color:#cf3; position:relative; float:left; }
img { cursor:move; padding:10px; }
JS
var immagine; /*La variabile immagine è destinata a contenere l'elemento da trascinare. Viene caricata dal metodo event.target.getAttribute("id") nella funzione iniziaDrag(event) che gestisce l'evento ondragstart. event.target.getAttribute("id") funziona così: 1 - event viene passato alla funzione iniziaDrag(event) dall'evento ondragstart. Ovvero quando l'utente preme il tasto sinistro del mouse su un elemento "draggabile" ed inizia il trascinamento. 2 - target è l'oggetto bersaglio dell'evento. In questo caso l'elemento <img> che l'utente sta trascinando. 3 - getAttribute("id") significa che, dell'elemento target, viene preso l'attributo "id": la stringa "ciliegie".*/ var bersaglio; /*bersaglio è l'elemento su cui sono trascinate le ciliegie. E' un oggetto che intercetta due eventi: ondragover quando qualche cosa viene trascinata sopra di esso, e ondrop, quando l'oggetto trascinato viene rilasciato. L'evento ondragover è gestito dalla funzione DragOver(event) dove event contiene le informazioni relative all'elemento su cui viene trascinato l'oggetto. In questo caso l'elemento <div> con id="bersaglio" Il metodo event.preventDefault() disabilita il comportamento di default predefinito per l'evento ondragover. La domanda è: qual'è il comportamento predefinito per l'evento dragover? Altra domanda quante volte viene innescato l'avento dragover? Provo a memorizzare questa informazione nella variabile conta.*/ var conta=0; /*La variabile conta è inizializzata a zero al momento della visualizzazione/caricamento della pagina e ne viene visualizzato il valore al momento del rilascio dell'immagine nel contenitore bersaglio.*/ function iniziaDrag(event){ immagine=event.target.getAttribute("id"); } function DragOver(event){ event.preventDefault(); conta=conta+1; } /*La funzione Drop(event) viene eseguita per gestire l'evento ondrop. Il target di event è l'elemento su cui gestire l'evento ondrop ovvero il bersaglio.*/ function Drop(event){ alert(conta); //l'istruzione che segue cancella la scritta: "Trascina qui l'immagine." event.target.innerHTML=""; //l'istruzione che segue inserisce in bersaglio l'immagine. event.target.appendChild(document.getElementById(immagine)); //l'istruzione che segue rende l'immagine delle ciliegie draggable document.getElementById(immagine).draggable=true; //l'istruzione che segue annulla il comportamento di default dell'evento event.preventDefault(); //l'istruzione che segue arresta la propagazione dell'evento. event.stopPropagation(); return false; }