Как определить событие dragleave в Firefox при перетаскивании за пределы окна

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.
    


36
задан Matt 28 October 2016 в 12:37
поделиться