El Atributo ONDRAGENTER

Es parte de la API de Drag and Drop de HTML5 y se activa cuando un elemento arrastrable entra en los límites de una zona de destino válida.
El atributo ondragenter
es parte de la API de Drag and Drop de HTML5 y se activa cuando un elemento arrastrable entra en los límites de una zona de destino válida. Es esencial para proporcionar retroalimentación visual al usuario durante operaciones de arrastre, como resaltar áreas donde se puede soltar un elemento.
¿Qué hace ondragenter
?
Disparador:
Cuando un elemento arrastrable entra en una zona de destino (drop target).
Uso principal:
-
Indicar visualmente que un elemento puede soltarse en la zona.
-
Preparar la zona para aceptar datos.
Ciclo de eventos clave:
-
ondragstart
: Inicia el arrastre. -
ondragenter
: Elemento entra en la zona de destino. -
ondragover
: Elemento se mueve sobre la zona (requieree.preventDefault()
para permitir el drop). -
ondragleave
: Elemento sale de la zona. -
ondrop
: Elemento se suelta en la zona.
Requisitos básicos
-
Elemento arrastrable: Debe tener
draggable="true"
. -
Zona de destino: Debe manejar
ondragover
cone.preventDefault()
para aceptar drops.
Sintaxis básica
Como atributo HTML:
<div id="zonaDestino" ondragenter="resaltarZona(event)" ondragover="event.preventDefault()" > Suelta aquí </div>
Con JavaScript (recomendado):
const zona = document.getElementById('zonaDestino'); zona.addEventListener('dragenter', (e) => { e.target.style.border = '3px dashed #4CAF50'; });
Ejemplos prácticos
Ejemplo 1: Resaltar zona al entrar
<div class="item" draggable="true">???? Arrástrame</div> <div id="contenedor" style="width: 300px; height: 200px; border: 2px solid #ccc;" > Zona de destino </div> <script> const contenedor = document.getElementById('contenedor'); contenedor.addEventListener('dragenter', (e) => { e.target.style.background = '#e8f5e9'; e.target.style.border = '2px solid #4CAF50'; }); contenedor.addEventListener('dragleave', (e) => { e.target.style.background = 'white'; e.target.style.border = '2px solid #ccc'; }); contenedor.addEventListener('dragover', (e) => { e.preventDefault(); // ¡Necesario para permitir el drop! }); </script>
Ejemplo 2: Sistema de subida de archivos
<div id="dropZone" style="border: 2px dashed; padding: 20px;"> Arrastra archivos aquí </div> <script> const dropZone = document.getElementById('dropZone'); // Resaltar al entrar dropZone.addEventListener('dragenter', (e) => { e.target.style.background = '#f0f0f0'; }); // Restaurar al salir dropZone.addEventListener('dragleave', (e) => { e.target.style.background = 'white'; }); // Permitir drop dropZone.addEventListener('dragover', (e) => { e.preventDefault(); }); // Manejar archivos soltados dropZone.addEventListener('drop', (e) => { e.preventDefault(); const archivos = e.dataTransfer.files; console.log('Archivos subidos:', archivos); e.target.style.background = 'white'; }); </script>
Diferencias clave entre eventos
Evento | Descripción |
---|---|
ondragenter |
Al entrar en la zona de destino (1 vez) |
ondragover |
Mientras está sobre la zona (continuamente) |
ondragleave |
Al salir de la zona de destino |
Mejores prácticas
Proporcionar retroalimentación visual clara:
zona.addEventListener('dragenter', (e) => { e.target.classList.add('resaltado'); });
Restaurar el estado original en ondragleave
:
zona.addEventListener('dragleave', (e) => { e.target.classList.remove('resaltado'); });
Accesibilidad:
Usar ARIA roles para indicar zonas interactivas:
<div role="region" aria-label="Zona de destino">...</div>
Asegurar compatibilidad con navegación por teclado.
Casos avanzados
Juego de clasificación de elementos:
<div class="categoria" data-categoria="frutas"> ???? Frutas <div class="item" draggable="true" data-tipo="fruta">????</div> </div> <div class="categoria" data-categoria="verduras"> ???? Verduras </div> <script> document.querySelectorAll('.categoria').forEach(zona => { zona.addEventListener('dragenter', (e) => { if (e.target.classList.contains('categoria')) { e.target.style.opacity = '0.7'; } }); zona.addEventListener('dragleave', (e) => { if (e.target.classList.contains('categoria')) { e.target.style.opacity = '1'; } }); zona.addEventListener('drop', (e) => { e.preventDefault(); const tipo = e.dataTransfer.getData('text/plain'); if (zona.dataset.categoria === 'frutas' && tipo === 'fruta') { e.target.appendChild(document.querySelector('[data-tipo="fruta"]')); } }); }); </script>
Errores comunes
<!-- MAL: No usar draggable="true" --> <div>Arrastra esto</div> <!-- No es arrastrable --> <!-- CONFUSIÓN: Olvidar e.preventDefault() en ondragover --> <div ondragenter="resaltar()" ondragover="// ¡Falta prevenir el comportamiento predeterminado!" ></div> <!-- SIN MANEJAR ondragleave --> <div ondragenter="resaltar()"></div> <!-- El estilo queda activo para siempre -->
Compatibilidad
Navegador | Soporte |
---|---|
Chrome | ✅ Todas versiones |
Firefox | ✅ Todas versiones |
Safari | ✅ v10+ |
Edge | ✅ Todas versiones |
Móviles | ⚠️ Soporte parcial |
Conclusión
El atributo ondragenter
es clave para:
- Mejorar la experiencia de usuario durante operaciones de arrastre.
- Crear interfaces intuitivas con retroalimentación visual.
- Implementar sistemas complejos como subida de archivos o juegos.
Recuerda:
- Siempre usa
e.preventDefault()
enondragover
. - Combina
ondragenter
conondragleave
para restablecer estilos. - Prueba en múltiples navegadores y dispositivos.
¡Ahora puedes crear zonas de destino interactivas y profesionales!