用于HTML5拖放的DropEffect语义

用于HTML5拖放的DropEffect语义,html,drag-and-drop,Html,Drag And Drop,根据HTML5规范,放置目标上的dropEffect属性允许放置目标选择所需的放置效果。拖放框架应将其与拖动源设置的effectAllowed属性相结合,以显示匹配的视觉反馈(通常是特定的光标,具体取决于操作) 但是,我无法在不同浏览器中一致地使用此功能。它似乎像预期的那样适用于Chrome和Opera,但不适用于IE和FF(尽管每个浏览器的开发人员文档都明确地记录了它) 我在JSFIDLE上收集了一个示例: 此示例是否不正确,或者我对此功能的用途的理解是否有误,或者这些浏览器错误是否存在?我遇

根据HTML5规范,放置目标上的dropEffect属性允许放置目标选择所需的放置效果。拖放框架应将其与拖动源设置的effectAllowed属性相结合,以显示匹配的视觉反馈(通常是特定的光标,具体取决于操作)

但是,我无法在不同浏览器中一致地使用此功能。它似乎像预期的那样适用于Chrome和Opera,但不适用于IE和FF(尽管每个浏览器的开发人员文档都明确地记录了它)

我在JSFIDLE上收集了一个示例:


此示例是否不正确,或者我对此功能的用途的理解是否有误,或者这些浏览器错误是否存在?

我遇到了与您完全相同的问题,得出了与您相同的结论,它根本不起作用。除了更改鼠标光标外,还需要在源元素处计算发生了什么-从中,您可以收听dragend,例如,如果拖放效果为“移动”,则删除该元素,如果是“复制”,则保留该元素。这也不是始终如一的。我问了这个问题,用我所有的发现做了一个长时间的解释

顺便说一句,我看到它说,拖放是在风险被删除,由于缺乏实施,这是一个遗憾

function onDragStart(element, event) {
    var dataTransfer = event.dataTransfer,
        effect = element.innerText || element.textContent;
    dataTransfer.effectAllowed = effect;
    dataTransfer.setData("Text", effect);
    dataTransfer.setDragImage(element, 0, 0);
}

function onDragEnter(element, event) {
    var dataTransfer = event.dataTransfer,
        effect = element.innerText || element.textContent;
    dataTransfer.dropEffect = effect;
    event.preventDefault();
}

function onDragOver(element, event) {
    var dataTransfer = event.dataTransfer,
        effect = element.innerText || element.textContent;
    dataTransfer.dropEffect = effect;
    event.preventDefault();
}