Arrastrar y Soltar del HTML5
El arrastrar y soltar es una característica muy común. Esto es cuando agarras y lo arrastras a otra posición diferente.
En HTML5 el arrastrar y soltar es parte del estándar: cualquier elemento puede ser arrastrado.
En el siguiente ejemplo se muestra un ejemplo simple de arrastra y soltar:
<!doctype html>
<html>
<head>
<script>
function allowDrop(ev) {
ev.preventDefault();
}
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
</div>
<img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)"
width="336" height="69">
</body>
</html>
Esto puede parecer complicado, pero vamos a explicar las diferentes partes de los eventos para arrastrar y soltar:
Hacer un elemento arrastrable
Antes que nada, para hacer un elemento arrastrable se debe establecer el atributo draggable
en true
:
<img draggable="true">
¿Qué arrastrar? con ondragstart y setData()
Para que un elemento sea arrastrable se debe especificar que sucede cuando el elemento es arrastrado:
- El atributo ondragstart llama a la función drag(event), que especifica que datos se arrastran.
- El método dataTransfer.setData() especifica el tipo de datos y el valor del dato arrastrado.
function drag(ev){
ev.dataTransfer.setData("text", ev.target.id);
}
En este caso, el tipo de datos es "text"
y el valor es el id
del elemento arrastrado ("drag1")
.
¿Dónde soltar? con ondragover
El atributo ondragover
especifica a este elemento que ahí puede ser soltado el dato/elemento arrastrado. Por defecto, dato/elemento no puede ser soltado en otros elementos. Para permitir el soltar, debemos evitar el manejo por defecto del elemento, y esto se hace llamando el método event.preventDefault() para el evento ondragerover
:
event.preventDefault()
Soltar con ondrop
Cuando el dato/elemento arrastrado es soltado, un evento ocurre. el atributo ondrop
llama a la función drop(event):
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
Explicación del código:
- se llama a
preventDefault()
es para evitar el manejo por defecto de los datos por parte del navegador (por defecto es abierto como enlace al soltar). - se obtiene los datos arrastrados con el método
dataTransfer.getData()
. Este método devolverá todos los datos que se configurarón para el mismo tipo en el métodosetData()
. - Los datos arrastrados son el id de el elemento arrastrado
("drag1")
. - Agregar el elemento arrastrado dentro del elemento de soltado.