[Bug] Не работает Touch на windows
Описание При взаимодействии с Touch с помощь тачскрина/пера он не реагирует на это
Версия библиотеки v4.23.0
Шаги воспроизведения
- Идём на https://vkcom.github.io/VKUI/#/Touch
- Пытаемся сдвинуть круг с помошью пера/тачскрина.
Ожидаемое поведение Круг двигается
Пример с воспроизведением https://vkcom.github.io/VKUI/#/Touch
Альт шаги воспроизведения
- Ставим spacedesk server на комп, spacedesk client на телефон (https://www.spacedesk.net/#download)
- В устройствах ввода spacedesk client; сенсорный экран нужно поставить тип сенсорного ввода абсолютное касание
- Подключаем телефон через spacedesk к компу
- Идём на https://vkcom.github.io/VKUI/#/Touch
- Пытаемся сдвинуть круг с на телефоне
Версии Chrome 96.0.4664.93 Windows 11 22000.318 Android 10 Spacedesk client v0.9.86 Spacedesk server v1.0.17
Подозреваю, что это проблемы на устройствах с мульти-инпутом (мышка + тач) — в Touch всегда используется только один способ ввода. Самое простое воспроизведение: открыть vkui-приложение (или доку) в хроме и потом включить эмуляцию тача — жесты перестанут работать.
Чинится через:
-
PointerEvents, но это брейкинг, потому чтоpreventDefaultнаtouchMoveи наpointerMove— совсем разные вещи. - Двойную провязку на
TouchEvents+MouseEvents, но тогда все события (start / move / end) будут вылетать по два раза. - Динамическую подвязку на
touchMove/EndилиmouseMove/Upв зависимости отtouchStart / mouseDown, но нужно быть осторожным тк на тачах все равно вылетает mouse-событие для совместимости.
FYI тому кто этим займется: getting touchy
На текущий момент переход на Pointer events блочит 13 сафари
Нужно учитывать при onpointerdown, что он также работает при нажатии на среднюю кнопку мыши и кнопку вызова контекстного меню.
-
event.button === 0– основное нажатие -
event.button === 1– нажатие на среднюю кнопку -
event.button === 2илиevent.button === 0 && event.ctrlKey === true– вызов контекстного меню
Также смотри:
- комментарии к https://github.com/VKCOM/VKUI/issues/8882
- пост Mouse, Touch and Pointer events ↗️
@gou177 Привет! Можешь, пожалуйста, проверить воспроизводится ли проблема в v7.6.3?
@thoughtspile предлагал "Двойную провязку на TouchEvents + MouseEvents, но тогда все события (start / move / end) будут вылетать по два раза." – сделали так в #8883
Задача закрыта из-за отсутствия активности в течение последних 14 дней. Если это произошло по ошибке или проблема все ещё актуальна, откройте задачу повторно.