2015-01-14 3 views
1

На андроиде, когда обнаружено событие прокрутки, срабатывает событие касания, которое предотвращает срабатывание касания после прокрутки. чтобы предотвратить срабатывание touchcancel, я использую preventDefault на touchStart на прокручиваемом div. теперь проблема заключается в том, что мне нужно иметь touchUp и прокрутку, чтобы моя функция обнаружения жестов работала, а также прокрутка к работе:/Предотвращение прикосновения к прокруткеСтандартное событие

это выполнимо?

+0

Учитывая такую ​​небольшую информацию (и никакой код), очевидный ответ не мешает ей в первую очередь. Помимо этого мы понятия не имеем, что ваш вариант использования для любой ситуации. Предоставьте полную информацию и код – charlietfl

+0

ohh man, мой код настолько сложный:/Я попытался подвести итог этой проблеме, чтобы увидеть, удалось ли кому-либо снова связать событие прокрутки с курсором после того, как курсор уже был нажат. например, связать любой элемент, прокручивающийся до курсора. проблема возникает на андроиде, когда запускается событие прокрутки, он вызывает сенсорный сенсор, который уничтожит мою функцию обнаружения жестов, потому что touchcancel предотвратит запуск touchEnd, поэтому решение должно было использовать preventDefault на touchDown, но затем прокрутка события не уволятся:/ –

+1

сломайте это на простом примере. Возможно, вы сможете использовать условия, чтобы определить, следует ли предотвращать дефолт или нет. Помогло бы понять, почему вам необходимо предотвратить это в первую очередь. – charlietfl

ответ

0

Touchcancel всегда будет уволен, если вы не предотвратите дефолт в touchmove, так как браузер должен сразу же контролировать действия панорамирования и масштабирования. Лучше всего использовать swic-интерфейс Pointer Events с использованием атрибута CSS touch-action соответственно, это дает вам больше контроля, так как pointermove может избежать pointercancel, в зависимости от вашего свойства CSS touch-action, применяемого к соответствующему объекту.

touchcancel событие вызывается, когда точка касания была нарушена в реализации конкретного способа (например, слишком много сенсорных точек созданы).

При использовании события указателя, touch-action: pan-y позволит браузеру выполнять регулярную вертикальную прокрутку, и не будет срабатывать pointercanceltouchcancel эквиваленте), когда жест выполняются вертикально. Touch-action: none является эквивалентом вызова event.preventDefault(), поскольку он не будет ни прокручивать, ни масштабировать, ни применять какие-либо действия браузера по умолчанию.

Событие pointercancel срабатывает, когда браузер определяет, что там вряд ли будут какие-либо больше указателей событий, или если после того, как событие pointerdown обжигают, указатель затем используется для управления видового экрана панорамирование, масштабирования или прокрутки.

Отметьте this jQuery plugin, который обрабатывает события горизонтального разговора с помощью интерфейсов Touch и Pointer и объясняет различия между ними более подробно.

Смежные вопросы