Проблема относительно известна, но все решения довольно «хакерские». Я наткнулся на обходной путь, который исправляет это в моем случае и должен быть адаптируем для большинства ситуаций.
Я слушаю dragenter
события на контейнере (коробке) моих возможных дропзон. События запускаются всякий раз, когда перетаскивание перемещается от одного элемента к другому и попадает в контейнер. Когда целью является одна из моих зон перетаскивания (или, возможно, ребенок в зоне перетаскивания, но в моем случае это не было необходимо, так как вы не можете добраться до детей, не войдя сначала в окружающее поле), тогда я устанавливаю подсвечиваемую подсветку как обычно.
Когда событие dragenter
запускается на самом контейнере, я удаляю выделение из предыдущего элемента, потому что я, должно быть, оставил его. Для события dragenter
был выделен элемент relatedTarget
, поэтому его легко найти, и для прослушивателя событий dragleave
нет необходимости.
Обратите внимание, что вы можете убрать выделение в явном виде после отбрасывания, в зависимости от вашей точной логики отбрасывания.