Я хочу наложить div над окном просмотра, когда пользователь перетаскивает файл в окно.
Однако у меня возникают проблемы с распространением событий. Когда я устанавливаю оверлей на display: block
, он снова запускает событие dragleave
, а затем еще один dragenter
, а затем еще один dragleave
, поэтому он всегда находится в состоянии post-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. Добавьте класс 'dragenter' в 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>