-
Notifications
You must be signed in to change notification settings - Fork 41
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Проблема с дублированием события при одиночном скроллинге #24
Comments
У меня на маке не воспроизводится данная проблема. Попробую потестить на других. Если получится найти такой мак буду смотреть, что можно сделать. Но могу сказать, что при 300ms и более у тебя может возникнуть баг с обычными мышками. |
Обычные мышки можно в исключение поставить, используя И, кстати, прямо очень не хватает пересчёта deltaY на реальные пиксели перед проверкой. А то случайное касание тачпада уже приводило к callback'у. Но в принципе можно для лёгкой правки использовать deltaMode просто по значению:
(этот кусок кода нужно вставить сюда https://github.com/Promo/wheel-indicator/blob/master/lib/wheel-indicator.js#L115 ). Так при таче (в частности, использовании Magic Mouse) будет определяться направление только после значительного усилия, а не при случайном касании тачпада или Magic Mouse, а события колёсика мышки, Page Up/Down и остальные сразу будут пропускаться вперёд. И лучше это значение ("30" из примера) перекинуть в параметры, чтобы сменить можно было в зависимости от нужд. |
Ну в этом и идея, чтоб срабатывал на любое касание. Как отличить случайное от неслучайного? Вдруг юзер просто так мотает. |
e.deltaMode работает только в FF, точнее только в нем возвращает единичку у обычных колес мыши. |
Я протестировал на многих Macbook'ах Pro эту проблему - на некоторых она проявляется (где-то с 1 из 20 Macbook Pro возникает данная проблема, и только в Chrome).
Приведу сразу результаты вывода обработки события
mousewheel
(формат вывода:
скрипт: строка - Date().getTime() - event.wheelDelta
):Как видно, максимальный разрыв между обработкой - 460ms (предпредпоследняя и предпоследняя сроки). Почему происходит такой рывок - не известно. Но он происходит постоянно (9 из 10 прокруток тачем приводят к такому или немного меньшим разрывам).
В примере представлен результат теста с самам длинным разрывом. В остальных случаях он не превышал 300ms (около 150-250 в среднем).
Исправил данную ситуацию, увеличим таймаут в setTimeout() с 150ms, прописанных в скрипте по-умолчанию, до 500ms. Понимаю, что 500ms в каких-то редких случаях может быть много, но до 300ms увеличить таймаут можно без проблем - тогда данная проблема будет возникать на проблемной связке Macbook Pro + Chrome только в каждом 20-м вызове, что делает скрипт намного стабильнее к данной проблеме.
The text was updated successfully, but these errors were encountered: