Quiero superponer un div sobre la ventana gráfica cuando el usuario arrastra un archivo a la ventana.Eventos de propagación de eventos, superposición y arrastrar y colocar
Sin embargo, tengo problemas con la propagación del evento. Cuando configuro la superposición en display: block
, parece disparar un evento dragleave
y luego otro dragenter
y luego otro nuevamente, por lo que siempre está en un estado posterior a la dragleave. Por supuesto, llamo al e.stopPropagation()
y al e.preventDefault()
en el objeto del evento, pero no parece marcar la diferencia.
El console.log() de salida cuando se arrastra algo sobre la ventana:
dragenter
dragenter
dragleave
dragenter
dragleave
El css. #overlay
se establece en display: none
por defecto, pero se mostrará si tiene body
la clase dragenter
:
body {
position: absolute;
height: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: 0;
padding: 0;
}
#overlay {
position: absolute;
height: auto;
width: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url(bg.png) repeat-x top right, url(bg.png) repeat-x bottom left, url(bg.png) repeat-y top right, url(bg.p
ng) repeat-y bottom left;
display: none;
}
body.dragenter #overlay {
display: block;
}
El javascript. Agregue la clase 'dragenter' en dragenter y lo elimina en DragLeave:
$(document).on('dragenter', function (e) {
e.stopPropagation();
e.preventDefault();
console.log('dragenter');
$(document.body).addClass('dragenter');
});
$(document).on('dragleave', function (e) {
e.stopPropagation();
e.preventDefault();
console.log('dragleave';
$(document.body).removeClass('dragenter');
});
El html:
<body>
<div id="overlay">...</div>
...
</body>
Impresionante, es exactamente el problema que estaba buscando resolver por un par de horas;) pero hasta donde sé jquery, $ ('*: visible'). Live() debe ser un selector bastante caro. ¿Podría haber otra solución? me refiero a los chicos de imgur.Com obviamente encontró una forma (arrastrar un archivo desde su buscador/explorador al sitio y verá) pero no pude revertir la ingeniería del código para descubrir cómo lo hicieron :( –
Creo que es una solución bastante pesada también, pero es el más fácil que encuentro (con limitaciones de tiempo en un proyecto de trabajo y todo). Traté de ver el código imgur también y no es algo en lo que quería profundizar. – twig