API de arrastrar y soltar HTML
En HTML, cualquier elemento se puede arrastrar y soltar.
Ejemplo

Arrastre la imagen de W3Schools al rectángulo.
Arrastrar y soltar
Arrastrar y soltar es una característica muy común. Es cuando "agarras" un objeto y lo arrastras a una ubicación diferente.
Compatibilidad con navegador
Los números de la tabla especifican la primera versión del navegador que es totalmente compatible con Arrastrar y soltar.
API | |||||
---|---|---|---|---|---|
Drag and Drop | 4.0 | 9.0 | 3.5 | 6.0 | 12.0 |
Ejemplo HTML de arrastrar y soltar
El siguiente ejemplo es un ejemplo simple de arrastrar y soltar:
Ejemplo
<!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>
Puede parecer complicado, pero repasemos todas las diferentes partes de un evento de arrastrar y soltar.
Hacer que un elemento se pueda arrastrar
En primer lugar: para hacer que un elemento se pueda arrastrar, establezca el draggable
atributo en verdadero:
<img draggable="true">
Qué arrastrar: ondragstart y setData()
Luego, especifique lo que debe suceder cuando se arrastra el elemento.
En el ejemplo anterior, el ondragstart
atributo llama a una función, arrastrar (evento), que especifica qué datos se arrastrarán.
El dataTransfer.setData()
método establece el tipo de datos y el valor de los datos arrastrados:
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
En este caso, el tipo de datos es "texto" y el valor es el id del elemento arrastrable ("drag1").
Dónde caer - ondragover
El ondragover
evento especifica dónde se pueden soltar los datos arrastrados.
De forma predeterminada, los datos/elementos no se pueden colocar en otros elementos. Para permitir una caída, debemos evitar el manejo predeterminado del elemento.
Esto se hace llamando al event.preventDefault()
método para el evento ondragover:
event.preventDefault()
Hacer la gota - ondrop
Cuando se sueltan los datos arrastrados, se produce un evento de soltar.
En el ejemplo anterior, el atributo ondrop llama a una función, drop(event):
function drop(ev)
{
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
Código explicado:
- Llame a preventDefault() para evitar que el navegador maneje los datos de manera predeterminada (el valor predeterminado es abrir como enlace al soltar)
- Obtenga los datos arrastrados con el método dataTransfer.getData(). Este método devolverá cualquier dato que se haya establecido en el mismo tipo en el método setData()
- Los datos arrastrados son la identificación del elemento arrastrado ("drag1")
- Agregue el elemento arrastrado al elemento soltado
Más ejemplos
Ejemplo
Cómo arrastrar (y soltar) una imagen de un lado a otro entre dos elementos <div>: