Opções de ação de toque

A propriedade CSS touch-action permite que um desenvolvedor restrinja como um usuário pode interagir com um elemento, o que é especialmente útil para evitar que eventos sejam enviados quando não for necessário.

Antes da versão 55, o Chrome oferecia suporte a pan-x e pan-y, que restringem os elementos à rolagem em uma direção.

O vídeo abaixo mostra um exemplo de um elemento sem uma ação de toque definida (à esquerda), bem como pan-x e pan-y (meio e direita).

O CSS para os screencasts do meio e da direita:

.pan-x {
    touch-action: pan-x;
}

.pan-y {
    touch-action: pan-y;
}

No Chrome 55, pan-left, pan-right, pan-up e pan-down foram adicionados. Essas propriedades têm uma diferença sutil, mas importante, no comportamento.

Essas propriedades forçam o usuário a iniciar gestos em uma direção antes que o elemento responda. Isso é semelhante ao gesto "puxe para atualizar", que só responde quando o usuário faz gestos para baixo na tela.

O vídeo a seguir demonstra pan-right e pan-down, que exigem gestos para começar da direita para a esquerda e de baixo para cima, respectivamente. Uma vez iniciado o gesto, você pode poder ir para a frente e para trás. Somente a direção inicial é afetada.

Embora o vídeo demonstre esse comportamento, talvez seja mais fácil tentar por conta própria. Para isso, confira o exemplo.

O CSS para esta demonstração é:

.pan-right {
    touch-action: pan-right;
}

.pan-down {
    touch-action: pan-down;
}

A última coisa que está acontecendo no mundo da ação de toque é a propriedade pinch-zoom. Essa é uma nova propriedade no Chrome 55, atrás de uma flag, que pode ser usada com qualquer uma das opções de pan (ou seja, pan-x, pan-y, pan-left, pan-right, pan-down, pan-up).

Se você fizer o gesto de pinça em um site, o conteúdo da página vai ser ampliado. A definição de um touch-action vai impedir esse comportamento, mas a adição do zoom ativará esse comportamento novamente.

Este vídeo mostra a diferença entre touch-action: pan-x e touch-action: pan-x pinch-zoom.

Todas essas propriedades simplificam parte da lógica que, de outra forma, precisaria ser implementada pelos desenvolvedores usando pointer-events.