Pull to refresh

Неприятный глюк Mozilla Firefox 3 c position:fixed

Reading time 1 min
Views 1.5K
При реализации механизма Drag&Drop для сайта столкнулся со странным глюком. Иногда не отрабатывались события мыши при drop'e. При этом, глюк был не постоянный, что затрудняло его отладку.

После тщательного разбора ситуации, удалось выявить закономерность: если зажать клавишу мыши, затем, в таком состоянии, передвинуть мышь на слой, у которого в CSS установлен position: fixed — события мыши над этим слоем не отрабатываются вобще. Ситуация показалась мне очень странной. Ещё раз всё тщательно проверив, я отписал багрепорт в Mozilla (https://bugzilla.mozilla.org/show_bug.cgi?id=449579). Там же есть тесткейс этого глюка. Глюк подтвердили, но он до сих пор не исправлен.

Данная ситуация не даёт возможности сделать drop на область с position:fixed не прибегая к извращениям.

Для себя я применил следующее решение:
  1. При начале драга устанавливаем все слои у которых position:fixed в position:absolute с учётом координат на странице и положения полос прокрутки.
  2. Выполняем drop
  3. Возвращаем position:fixed

Всё это время нужно следить за положением полос прокрутки и если оно изменилось перетащить слои т.к. пользователь может крутонуть колёсико мышки или прокрутить страницу иным способом. К сожалению, при этом возникают мелькания, от которых пока избавиться не удалось. Но, к счастью, такая ситуация довольно редкая.
Tags:
Hubs:
+20
Comments 43
Comments Comments 43

Articles