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 ' не собираюсь на работу.