HTML5 include atribute noi ce pot fi folosite pentru Drag si Drop cu mouse-ul. Drag reprezinta tragerea obiectului cu mouse-ul, iar Drop e plasarea acestuia (cand se elibereaza clicul de la mouse).
Acestea sunt atributele HTML5 ce pot fi utilizate in efecte drag-drop:
• draggable - Acest atribut specifica daca un element HTML poate fi tras cu mouse-ul (Drag) (valori: true, false, sau auto).
• ondrag - Acest eveniment e declansat continuu in timpul unei operatiuni de tragere cu mouse-ul.
• ondragstart - Evenimentul e declansat cand utilizatorul incepe sa mute obiectul.
• ondragenter - Evenimentul e declansat pe elementul definit pt. Drop (unde va fi lasat obiectul tras) cand acesta intra in suprafata lui.
• ondragover - Acest eveniment e declansat continuu in timp ce obiectul e tras pe elementul definit pentru Drop.
• ondragleave - Evenimentul e declansat cand obiectul e tras in afara zonei elementului unde trebuie plasat; cand paraseste suprafata acestuia.
• ondragend - E declansat cand utilizatorul termina operatiunea de tragere cu mouse-ul si elibereaza clicul.
• ondrop - Evenimentul e declansat pe elementul setat pentru plasarea obiectului tras, cand acesta e plasat; vine imediat dupa ondragend.
nume_atribut="handler(event)"- handler(event) - e o functie care sa fie apelata la declansarea evenimentului reprezentat de acel atribut.
<!doctype html> <html lang="ro"> <head> <meta charset="utf-8" /> <title>Exemplu Drag si Drop HTML5 - JavaScript</title> <style type="text/css"> #drag1 { width: 12em; margin: .2em; background-color: #02ed03; border: 2px dashed #000; padding: .2em; color: #0001da; cursor: pointer; } #target_drop1 { width: 20em; min-height: 3em; margin: .2em; background-color: #ededfe; border: 2px solid #000; } </style> </head> <body> <div draggable="true" ondragstart="dragStart(event)" id="drag1">Clic si trageti.<br/>https://marplo.net/</div> <div id="target_drop1" ondrop="drop(event)" ondragenter="return false;" ondragover="allowDrop(event)">Plasati aici</div> <script type="text/javascript"> function allowDrop(ev) { ev.preventDefault(); // anuleaza evenimentul } // functie apelata de ondragstart function dragStart(ev) { // seteaza tipul si valoarea continutului tras cu mouse-ul // Aceasta valoare va fi returnata de getData(). Aici ID-ul obiectului mutat ev.dataTransfer.setData('Text', ev.target.id); } // functie apelata de ondrop function drop(ev) { ev.preventDefault(); // anuleaza evenimentul implicit pentru a permite executarea ondrop // preia valoarea setata de setData() (ID-ul obiectului mutat), // ca parametru se foloseste sirul cu acelasi tip de data setata cu setData() var drag_data = ev.dataTransfer.getData('Text'); // adauga obiectul in elementul definit pt. Drop ev.target.appendChild(document.getElementById(drag_data)); } </script> </body> </html>• In elementul care trebuie mutat /tras, e adaugat: draggable="true" si ondragstart="dragStart(event)" ca sa specifice ce se intampla in momentul cand utilizatorul incepe sa traga obiectul, apeleaza functia dragStart(), unde se specifica ce continut e tras.
function drop(ev) { ev.preventDefault(); var drag_data = ev.dataTransfer.getData('Text'); ev.target.appendChild(document.getElementById(drag_data)); }- preventDefault() intrerupe browser-ul sa declanseze actiunea implicita la acest eveniment (implicit la Drop e deschiderea ca link in fereastra).
<!doctype html> <html lang="ro"> <head> <meta charset="utf-8" /> <title>Exemplu Drag si Drop imagine - HTML5 - JavaScript</title> <style type="text/css"> #div1, #div2 { float: left; width: 19em; min-height: 90px; margin: .2em; border: 2px solid #000; padding: .2em; } .todrag { cursor: pointer; } .dragging { border: 1px dashed #00f; background: #ff1; } </style> </head> <body> <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"> <img src="marplo.gif" draggable="true" ondragstart="dragStart(event)" id="drag2" class="todrag" width="274" height="89" alt="Drag-Drop imagine" /> </div> <div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div> <br style="clear:both" /> <script type="text/javascript"> function allowDrop(ev) { ev.preventDefault(); // anuleaza evenimentul } // functie apelata de ondragstart function dragStart(ev) { // seteaza tipul si valoarea continutului tras cu mouse-ul // Aceasta valoare va fi returnata de getData(). Aici ID-ul obiectului mutat ev.dataTransfer.setData('Text', ev.target.id); // seteaza alta clasa css ev.target.className = 'dragging'; } // functie apelata de ondrop function drop(ev) { ev.preventDefault(); // anuleaza evenimentul implicit pentru a permite executarea ondrop // preia valoarea setata de setData() (ID-ul obiectului mutat), // ca parametru se foloseste sirul cu acelasi tip de data setata cu setData() var drag_data = ev.dataTransfer.getData('Text'); // adauga obiectul in elementul definit pt. Drop ev.target.appendChild(document.getElementById(drag_data)); // seteaza alta clasa css document.getElementById(drag_data).className = 'todrag'; } </script> </body> </html>- Demo :
Atributele cu evenimentele HTML5 pentru Drag-Drop sunt folositoare la efecte simple de mutare a unui continut dintr-un element in altul, dar nu sunt utile pentru operatiuni cu interfata mai complexa de drag-drop. In acest caz folositi jQuery sau alta librarie de functii JavaScript.
De exemplu, daca vreti sa restrangeti efectul de Drag doar in interiorul elementului parinte, folositi jQuery UI; vedeti Exemplu 4 din acest tutorial: jQuery UI draggable - Muta /Trage elemente.
<table><tr> <th>Title 1</th> <th>Title 2</th> </tr></table>
.some_class { line-height: 150%; }
document.getElementById("id_button").onclick = function(){ window.open("http://coursesweb.net/"); }
$ar_dir = scandir("dir_name"); var_export($ar_dir);
He will sleep there. - El va dormi acolo.
Él dormirá allí. - El va dormi acolo.