Я думаю, что код из предыдущего ответа, как написано, имеет несколько проблем, в частности, когда их несколько касаний.
(ПРИМЕЧАНИЕ: я смотрю на код, который я написал, используя библиотеку Elemental в качестве ссылки,поэтому некоторые вызовы могут быть разными в пользовательской библиотеке).
a) Код не фильтрует касания, направленные на кнопку;он вызывает TouchEvent.getTouches ().Вы хотите вызвать TouchEvent.getTargetTouches () при сенсорном запуске и сенсорном движении, чтобы получить прикосновения только для вашей кнопки.Вы хотите вызвать TouchEvent.getChangedTouches () на touchend, чтобы получить конечное касание.
b) Код не учитывает мультитач.На Touchstart вы можете проверить, доступно ли одно касание, и выручить, если их больше одного.Кроме того, при запуске прикосновения спрятать идентификатор касания, затем использовать его в touchmove и touchend, чтобы найти идентификатор касания в возвращаемом массиве (в случае, если пользователь позже коснулся другого пальца).Вы также можете упростить и проверить наличие нескольких касаний касания и касания, а затем снова внести залог.
в) Я считаю, что вам нужно вызывать stopPropagation при запуске касания, поскольку вы обрабатываете событие.Я не вижу, где они вызывают event.stopPropagation для события touchstart. Вы можете видеть, что это происходит в обработчиках щелчков, но не в touchstart.Это предотвращает автоматическое превращение касания в щелчок браузером, что может привести к многократным щелчкам.
Существует также более простой способ.Если вас не волнует перетаскивание, начинающееся с кнопки, тогда вы можете просто вызвать свою логику щелчка в событии сенсорного запуска (и убедиться, что вы проверяете на одно касание и вызывать event.stopPropagation) и игнорировать сенсорное перемещение и касание.Все, что касается сенсорного перемещения и касания, - это случай, когда можно начать перетаскивание на кнопку.