我有一个脚本,它根据 event.dataTransfer.dropEffect 的值确定拖放操作的结果。我将属性 event.dataTransfer.effectAllowed 设置为值“copymove”。在 Firefox 中,dropEffect 的值默认为“移动”,当我在拖动过程中按 ctrl 键时为“复制”。在 Chrome 中,dropEffect 的值始终为“none”。Chrome 不支持这个 API 吗?
问问题
1995 次
2 回答
4
这是 Chrome(和 Internet Explorer)中的一个错误。对于 Chrome 有一个错误报告: https ://bugs.chromium.org/p/chromium/issues/detail?id=39399
作为一种解决方案,您必须在拖动事件时将 dropEffect 的内容存储在全局变量中,并使用其内容而不是 event.dataTransfer.dropEffect 如果该值在 drop 事件中为“none”。
于 2017-05-10T12:22:32.650 回答
0
我为此找到了解决方案,因为这些年来它仍然无法正常工作。
只有 Firefox 似乎会自动更新 event.dataTransfer.dropEffect 的值。
在所有其他浏览器中,您必须通过使用键盘事件(event.ctrlKey 和 event.shiftKey)来执行一些额外的步骤(在下面的脚本中提供)来捕获 CTRL 和 SHIFT 键的状态并更新 event.dataTransfer.dropEffect。
解决方案
我在此处附加的基本脚本更新了 event.dataTransfer.dropEffect 并使事情在 Chrome 和 Edge 中也能正常工作。
document.addEventListener("dragover", (event) => {
event.preventDefault();
var c = event.ctrlKey;
var s = event.shiftKey;
var dropEffect = updateDropEffect(c, s);
event.dataTransfer.dropEffect = dropEffect;
document.getElementById("div1").innerHTML = "drag type: " + dropEffect;;
}, false);
function updateDropEffect(c, s) {
// control, shift, none behaviors
if (c && s) { return "link"; }
if (c) { return "copy" }
return "move";
}
<div id="drag1"draggable="true">DRAG THIS TEXT BUT KEEP MOUSE BUTTON PRESSED WHILE PRESSING CTRL + SHIFT KEY
<br> You will notice that mouse pointer icon changes, not only in Firefox but also in in Chrome and Edge
<br><br>
</div>
<div id="div1">*** Look here for status of mouse pointer icon *** </div>
于 2022-02-10T08:07:32.000 回答