Arrastrar y Soltar en HTML5 - Drag And Drop - Tutorial
y Ejemplo
En este Articulo Arrastrar y Soltar en HTML5 ( drag and drop) veremos que es y como
funciona esta caracteristica que viene en HTML5, tambien vamos a construir un ejemplo que nos
servira de tutorial para ir practicando lo que vamos viendo. Que es la caracteristica Arrastrar y
Soltar en html5 (drag and drop)?, Drag and drop es una caracteristica que nos permite arrastrar
practicamente cualquier elemento de una pagina, funciona en base a:
Eventos
Javascript
Marcado de elementos
Esta caracterisitica permite la interactividad con el usuario de una manera mas facil, real y
dinamica, asi que comenzemos con esto Arrastrar y Soltar en HTML5...
Requerimientos:
Notepad ++(vale cualquier otro editor de textos)
Desarrollo
Para comprender el funcionamiento y puesta en marcha de la caracteristica drag and drop vamos a
realizar un ejemplo en el cual tendremos 4 imagenes tipo rompecabezas que seran capaces de
arrastrarse y cambiar de posicion entre ellas.
Creacion de contenido Arrastrable
Para hacer que un elemento de una pagina sea capaz de arrastrar y soltar en html5 tenemos que
agregar el atributo draggable y establecerlo a true, cabe decir que la mayoria de los navegadores
tienen la opcion de arrastrar activada por defecto para los elementos de ancla: como
draggable=true
en nuestro ejemplo tendremos 4 divs en los que iran las 4 imagenes que queremos arrastrar asi que
lo que arrastraremos seran los divs
Eventos
La caracteristica Drag and Drop posee algunos eventos para su manipulacion y control de todo el
proceso como son:
dragstart
Se dispara cuando comienza el arrastrado del elemento
drag
Se dispara cada vez que el mouse es movido y se esta arrastrando un objeto
dragenter
Se dispara cuando se esta realizando un arrastrado y se ingresa por primera vez con el mouse a un
elemento objetivo
dragleave
Se dispara cuando se esta realizando un arrastrado y deja con el mouse a un elemento objetivo
dragover
Se dispara cuando se esta realizando un arrastrado y se ingresa con el mouse a un elemento objetivo
drop
Se dispara cuando el usuario suelta el boton mientras arrastra un objeto sobre un objeto que puede
recibirlo
dragend
Se dispara cuando el usuario suelta el boton mientras arrastra un objeto
El estilo CSS de la clase columna es la siguiente:
.columna{
width:200px;
height:200px;
float:left;
border: 2px solid #FFFFFF;
-webkit-border-radius: 10px;
-ms-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
cursor:move;
}
.columna.over {
border: 2px solid #FF0000;
}
Aqui cabe decir que el codigo: cursor:move; es para que aparezca sobre el elemento el icono de
mover para darle a enternder al usuario que es un objeto arrastrable.
Ahora el codigo javascript donde se agregan los eventos drag and drop en html5 es el siguiente:
var dragSrcEl = null;
var cols = document.querySelectorAll('#panel .columna');
//guardamos el contenido que queremos cambiar para la transferencia al
dejar de arrastrar
function handleDragStart(e) {
dragSrcEl = this;
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/html', this.innerHTML);
}
function handleDragOver(e) {
if (e.preventDefault) {
e.preventDefault();
}
e.dataTransfer.dropEffect = 'move';
//efecto al mover
return false;
}
function handleDragEnter(e) {
this.classList.add('over');//agregamos borde rojo en el estilo css
}
function handleDragLeave(e) {
this.classList.remove('over'); //eliminamos borde rojo en el estilo css
}
function handleDrop(e) {
if (e.stopPropagation) {
e.stopPropagation(); //evitamos abrir contenido en otra pagina al
soltar
}
//hacemos el intercambio de contenido html de el elemento origne y
destino
if (dragSrcEl != this) {
dragSrcEl.innerHTML = this.innerHTML;
this.innerHTML = e.dataTransfer.getData('text/html');
this.classList.remove('over');
}
return false;
}
function handleDragEnd(e) {
[].forEach.call(cols, function (col) {
col.classList.remove('over');//eliminamos el borde rojo de todas las
columnas
});
}
//agregamos todos los eventos anteriores a cada columna mediante un ciclo
[].forEach.call(cols, function(col) {
col.addEventListener('dragstart', handleDragStart, false);
col.addEventListener('dragenter', handleDragEnter, false);
col.addEventListener('dragover', handleDragOver, false);
col.addEventListener('dragleave', handleDragLeave, false);
col.addEventListener('drop', handleDrop, false);
col.addEventListener('dragend', handleDragEnd, false);
});
Ahora solo queda probar el codigo...
Puedes ver el ejemplo en accion en el siguiente link:
Lab DragAndDrop
¿Quieres tener tu pagina web? Contrata con DigitalServer o HostGator!
( dominio incluido gratis )
----------
Post completo en: http://jonathanmelgoza.com/blog/arrastrar-y-soltar-en-html5-drag-anddrop/#ixzz3CNR3zxB4