Inicio > Desarrollo Web > Tutoriales de Javascript > Cómo implementar drag and drop en JavaScript con ejemplos prácticos

Cómo implementar drag and drop en JavaScript con ejemplos prácticos

Diego Cortés
Diego Cortés
September 19, 2024
Cómo implementar drag and drop en JavaScript con ejemplos prácticos

El drag and drop (arrastrar y soltar) es una funcionalidad que permite a los usuarios interactuar con elementos en una página web mediante el movimiento de un objeto de un lugar a otro. En este artículo, aprenderás cómo implementar esta funcionalidad en tus proyectos de JavaScript, utilizando ejemplos prácticos para facilitar la comprensión.

¿Qué es Drag and Drop?

El drag and drop es una técnica de interacción que permite mover elementos en una interfaz de usuario. Los usuarios pueden arrastrar un elemento y soltarlo en una ubicación diferente, lo que puede ser útil para organizar contenido, realizar listas de tareas, entre otros. En el contexto de JavaScript, esta técnica se basa en un conjunto de eventos que se disparan durante la acción de arrastre.

Eventos de Drag and Drop en JavaScript

Para implementar drag and drop, es necesario comprender los siguientes eventos:

1. dragstart

Este evento se activa cuando comienza el arrastre de un elemento. Es aquí donde puedes almacenar información sobre el elemento que se está arrastrando.

2. drag

Este evento se dispara durante el movimiento del elemento, pero generalmente se usa poco.

3. dragend

Este evento se activa cuando se termina el arrastre, ya sea que se haya soltado el elemento o que se haya cancelado la acción.

4. dragenter

Se produce cuando el puntero del mouse entra en un área donde un elemento puede ser soltado.

5. dragover

Este evento se activa cuando un elemento es arrastrado sobre un contexto de soltado. Es crucial para permitir el drop.

6. dragleave

Se produce cuando el puntero del mouse abandona el área de un contexto de soltado.

7. drop

El evento se desencadena cuando el elemento es soltado en un contexto de soltado válido.

Implementación Básica del Drag and Drop

A continuación, realizarás una implementación básica de la funcionalidad drag and drop. Para simplificar, crearemos una lista donde los elementos pueden ser reordenados.

Estructura HTML

Primero, vamos a definir una estructura HTML sencilla con una lista de elementos arrastrables.

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Drag and Drop en JavaScript</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <ul id="miLista">
        <li draggable="true">Elemento 1</li>
        <li draggable="true">Elemento 2</li>
        <li draggable="true">Elemento 3</li>
        <li draggable="true">Elemento 4</li>
    </ul>
    <script src="script.js"></script>
</body>
</html>

Estilos CSS

A continuación, agrega algunos estilos básicos para mejorar la visualización:

/* styles.css */
body {
    font-family: Arial, sans-serif;
}

ul {
    list-style-type: none;
    padding: 0;
}

li {
    padding: 10px;
    margin: 5px;
    background-color: #f0f0f0;
    border: 1px solid #ccc;
    cursor: move;
}

Script JavaScript

Ahora, vamos a implementar la lógica para manejar los eventos de drag and drop.

// script.js
const listItems = document.querySelectorAll('#miLista li');
let draggedItem = null;

listItems.forEach(item => {
    item.addEventListener('dragstart', () => {
        draggedItem = item;
        setTimeout(() => item.style.display = 'none', 0); // Ocultar el item arrastrado
    });

    item.addEventListener('dragend', () => {
        setTimeout(() => {
            draggedItem = null; // Restablecemos el item arrastrado
            item.style.display = 'block'; // Volver a mostrar el item
        }, 0);
    });

    item.addEventListener('dragover', (event) => {
        event.preventDefault(); // Necesario para permitir el drop
    });

    item.addEventListener('dragenter', () => {
        item.style.border = '2px dashed #000'; // Efecto visual
    });

    item.addEventListener('dragleave', () => {
        item.style.border = 'none'; // Remover el efecto visual
    });

    item.addEventListener('drop', () => {
        item.style.border = 'none'; // Remover el efecto visual
        if (draggedItem) {
            // Insertar el ítem arrastrado antes del elemento que se soltó
            item.parentNode.insertBefore(draggedItem, item);
        }
    });
});

Cómo Funciona el Código

  1. dragstart: Se guarda el elemento que se está arrastrando y se oculta temporalmente.
  2. dragend: Se restablece el elemento cuando se termina el arrastre.
  3. dragover: Este evento es crucial, ya que permite que el elemento sea soltado.
  4. dragenter y dragleave: Se utilizan para aplicar un estilo visual a los elementos que pueden recibir el drop.
  5. drop: Se inserta el elemento arrastrado en la nueva posición.

Conclusión

Implementar drag and drop en JavaScript es una manera efectiva de mejorar la interacción del usuario en tus aplicaciones web. A través de los ejemplos prácticos presentados, ahora deberías tener una comprensión sólida de cómo funciona esta funcionalidad. Experimenta con el código y personalízalo según tus necesidades. 

Recursos Adicionales

Espero que este artículo te haya sido útil para entender cómo trabajar con la funcionalidad de arrastrar y soltar en JavaScript. ¡No dudes en dejar tus comentarios y preguntas!

Diego Cortés
Diego Cortés
Full Stack Developer, SEO Specialist with Expertise in Laravel & Vue.js and 3D Generalist

Categorías

Page loaded in 29.06 ms