Я хочу наложить div на область просмотра, когда пользователь перетаскивает файл в окно.
Однако у меня возникли проблемы с распространением события.Когда я устанавливаю оверлей на display: block
, кажется, что он запускает событие dragleave
, затем еще один dragenter
, а затем еще один dragleave
, поэтому он всегда находится в состоянии после перетаскивания.Конечно, я вызываю e.stopPropagation()
и e.preventDefault()
для объекта события, но, похоже, это не имеет значения.
Вывод console.log () при перетаскивании чего-либо в окно:
dragenter
dragenter
dragleave
dragenter
dragleave
Css.#overlay
по умолчанию установлен на display: none
, но будет отображаться, если body
имеет класс 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;
}
Javascript.Добавьте класс dragger в dragenter и удалите его в 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');
});
html:
<body>
<div id="overlay">...</div>
...
</body>