Javascript drag and drop - задержка для разрешения

В настоящее время я застрял в следующей проблеме:

Мне нужно создать задержку, когда происходит драговер, а затем проверить, остается ли текущий объект драговер таким же. Когда это тот же объект -> выполнить код.

Это мой код:

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(), чтобы разрешить удаление, не может произойти, потому что эта функция является асинхронной. Есть идеи?

Спасибо,

Mathias

1 ответ

Можете ли вы объяснить больше о том, что вы пытаетесь достичь, и я могу ответить более полно?

Как правило, вы не всегда можете точно сказать, сработает ли перетаскивание. Лучшее, что вы можете сделать, это настроить зоны перетаскивания на своей странице и заставить их отменить событие перетаскивания, основываясь на том, что вы можете сказать об этом отбрасывании. Если вы хотите, чтобы ваше приложение работало с перетаскиванием через окно, вы не можете полагаться на глобальную переменную для хранения информации о том, что перетаскивается, и вы не можете видеть, что находится внутри перетаскивания - вы можете только знать, что это за вещь. тащат. Поэтому, если отбрасывание может быть приемлемым, вам нужно отменить событие. Смотрите этот вопрос

Я думаю, что, может быть, вы не понимаете, как распространяются дрейфвенты, и почему вы считаете, что вам нужен тайм-аут? Но блокирование очереди событий, чтобы выяснить, принимаете ли вы сброс, или пытаетесь отменить событие перетаскивания после того, как оно уже всплыло на вершину и было обработано браузером по умолчанию (то есть не принимать сброс), isn ' не собираюсь на работу.

Другие вопросы по тегам