Javascript拖放 - 延迟允许

时间:2014-07-04 12:14:06

标签: javascript drag

我目前遇到了以下问题:

我需要在dragover发生时创建延迟,然后检查当前的dragover对象是否仍然相同。当它是同一个对象时 - >执行代码。

这是我的代码:

var draggedId = null;
var triggered = false;

function allowDrop(ev) {

draggedId = ev.target.id;

setTimeout(function () {

    if (draggedId == ev.target.id && ev.target.id != "" && !triggered) {
        triggered = true;
        draggedId = "";
        ev.preventDefault();
    }

}, 2000);

}

function drop(ev) {
ev.preventDefault();
}

function dragLeave(ev) {

draggedId == "";
triggered = false;
}

Allowdrop功能是dragover事件。 ev.preventDefault()允许丢弃不能在那里发生,因为该函数是assync。 有什么想法吗?

谢谢,

的Mathias

1 个答案:

答案 0 :(得分:0)

你能解释一下你想要达到的目标吗?我可以更充分地回答这个问题吗?

通常情况下,您无法始终确定丢弃是否有效,您可以做的最好的事情是在您的页面上设置放置区域,让他们根据您可以了解的丢弃情况取消dragover事件。如果你想让你的应用程序使用跨窗口拖动,那么你就不能依赖全局变量来存储有关被拖动内容的信息,而你实际上无法看到拖动内部的内容 - 你只能知道什么是被拖了。因此,如果丢弃可能是可接受的,您需要取消该事件。见this question

我想也许你对dragevents如何传播感到困惑,这是你认为你需要超时的原因?但阻止事件队列以确定是否接受了丢弃,或尝试取消拖动事件后,它已经冒泡到顶部并由浏览器以默认方式处理(这是不接受丢弃)isn'去上班。