我希望用户能够将文件拖放到页面中并触发事件。现在我有一个覆盖在页面顶部的 z-index: 100 并且它可以将文件拖放到上面。我的问题是它与页面上的所有其他元素重叠(包括覆盖整个背景的元素),这意味着我无法单击下面的任何内容;文字、按钮、视频播放,下面的所有内容都无法交互。
我正在考虑删除点击,以便可以点击它,但仍然保留悬停事件,以便可以将文件放在上面。我没有运气弄清楚这一点,查看了其他多个 SO 问题以寻求答案,但没有一个像我想要的那样起作用。我正在寻找纯 JS(或 NodeJS,因为在我的情况下可以使用)、CSS 和 HTML。除此之外,我对如何完成这项工作的建议持开放态度。提前致谢!
我尝试使用 window.ondrop、window.ondragover 等而不是覆盖来执行此操作,但这似乎被页面上的其他元素打乱了。
我也尝试添加指针事件:无;和用户选择:无;组合和单独。
将覆盖层放在所有元素下方的图层上使其无法交互,原因与当覆盖层位于顶部时背景元素变得无法交互一样。
JSFiddle:https ://jsfiddle.net/apLuykz3/1/ 我需要下面的按钮以及任何其他元素都是可点击的,但是在将文件拖到窗口上时保持悬停事件。
HTML
<div id="dropOverlay"></div>
CSS
div#dropOverlay{
position: fixed;
left: 0;
top: 0;
width: 100vw;
height: 100vh;
z-index: 100;
}
div#dropOverlay[show="true"]{
background: rgba(0, 0, 0, 0.5);
}
JavaScript
// Drop events
document.querySelector("#dropOverlay").ondrop = function (e) {
// e.preventDefault();
var files = e.dataTransfer.files;
for (var i = 0; i < files.length; i++) {
console.log(files[i]);
}
this.removeAttribute("show");
}
document.querySelector("#dropOverlay").ondragenter = function (e) {
e.stopPropagation();
e.preventDefault();
this.setAttribute("show", "true");
}
document.querySelector("#dropOverlay").ondragleave = function (e) {
e.stopPropagation();
e.preventDefault();
this.removeAttribute("show");
}
document.querySelector("#dropOverlay").ondragover = function (e) {
e.preventDefault();
}