Drag & Drop con HTML5: trascinare gli elementi
Vediamo come funziona il Drag & Drop con un esempio pratico.
Il “drag and drop” rappresenta una delle tante novità introdotte dal linguaggio di markup HTML5. Di base, il drag and drop è una funzione operativa molto conosciuta: consiste nel selezionare e trascinare un elemento da un punto A a un punto B.
Il drag and drop HTML5 è uno standard che al momento ha problemi di compatibilità in Internet Explorer 9, Apple Safari e Opera: i primi due supportano in modo parziale lo standard, Opera invece ancora non accetta pagine e porzioni di pagina marcate con questa codifica. Mozilla Firefox e Google Chrome sono al momento gli unici due browser pienamente compatibili.
In HTML5, le API drag and drop operano grazie a dei set di “drag and drop events” e “data transfer object”, in pratica un mix di HTML5 e JavaScript che permette di compiere operazioni prima fattibili solo tramite quest’ultimo linguaggio.
Per capire meglio come funziona, faremo un piccolo esempio pratico. Creiamo una figura che può essere spostata e posizionata in uno spazio (un canvas ad esempio). Per fare questo ci serviremo della libreria JavaScript “Kinetic”.
<script src="http://www.tuositoweb.it/cartella-script/kinetic2d-v1.0.2.js"></script><script> function writeMessage(context, message){ context.font = "18pt Calibri"; context.fillStyle = "black"; context.fillText(message, 10, 25); } window.onload = function(){ var kin = new Kinetic_2d("myCanvas"); var canvas = kin.getCanvas(); var context = kin.getContext(); var rectX = canvas.width / 2 - 50; var rectY = canvas.height / 2 - 25; var draggingRect = false; var draggingRectOffsetX = 0; var draggingRectOffsetY = 0; var message = "Seleziona e trascina la figura in un punto desiderato..."; kin.setDrawStage(function(){var mousePos = kin.getMousePos(); if (draggingRect) { rectX = mousePos.x - draggingRectOffsetX; rectY = mousePos.y - draggingRectOffsetY;} kin.clear();writeMessage(context, message); kin.beginRegion(); context.beginPath();context.rect(rectX, rectY, 100, 50);context.lineWidth = 4;context.strokeStyle = "black";context.fillStyle = "#00D2FF";context.fill();context.stroke();context.closePath(); kin.addRegionEventListener("mousedown", function(){ draggingRect = true; var mousePos = kin.getMousePos(); draggingRectOffsetX = mousePos.x - rectX; draggingRectOffsetY = mousePos.y - rectY;});kin.addRegionEventListener("mouseup", function(){ draggingRect = false;});kin.addRegionEventListener("mouseover", function(){ document.body.style.cursor = "pointer";});kin.addRegionEventListener("mouseout", function(){ document.body.style.cursor = "default";}); kin.closeRegion(); }); };</script>
Perfetto: abbiamo creato un evento drag che risponde solo ai comandi input/output del mouse. Una codifica elaborata in questo modo aumenta il livello d’usabilità della porzione di pagina interessata (nonché dell’intero sito).
- Articolo precedente Siti web offline: come far usare pagine e funzioni senza collegamento Internet con Cache HTML5
- Articolo successivo Geolocalizzazione con HTML5