Firefox не правильно запускать событие dragleave при перетаскивании за пределы окна:
https://bugzilla.mozilla.org/show_bug.cgi?id=665704
https://bugzilla.mozilla.org/show_bug.cgi?id=656164
Я пытаюсь разработать обходной путь для этого (, который, как я знаю, возможен, потому что Gmail делает это), но единственное, что я могу придумать кажется действительно хакерским.
Один из способов узнать, когда произошло перетаскивание за пределы окна, это дождаться прекращения срабатывания события dragover
, (, потому что dragover
срабатывает постоянно во время операции перетаскивания). Вот как я это делаю:
var timeout;
function dragleaveFunctionality() {
// do stuff
}
function firefoxTimeoutHack() {
clearTimeout(timeout);
timeout = setTimeout(dragleaveFunctionality, 200);
}
$(document).on('dragover', firefoxTimeoutHack);
Этот код, по сути, создает и сбрасывает тайм-аут снова и снова. Тайм-аут в 200 миллисекунд не будет достигнут, пока событие dragover
не перестанет запускаться.
Хотя это работает, мне не нравится идея использования тайм-аута для этой цели. Это неправильно. Это также означает, что есть небольшая задержка перед исчезновением стиля «dropzone».
Другая идея, которая у меня была, заключалась в том, чтобы определить, когда мышь покидает окно, но обычные способы сделать это, похоже, не работают во время операций перетаскивания.
Есть ли у кого-нибудь лучший способ сделать это?
ОБНОВЛЕНИЕ:
Вот код, который я использую:
Drag and Drop Issue
Open up the console and look at what number is reporting when dragging files in and out of the window. The number should always be 0 when leaving the window, but in Firefox it's not.