A propriedade CSS touch-action
permite que um desenvolvedor restrinja a forma como um usuário
pode interagir com um elemento. Isso é muito útil para evitar o envio de eventos
quando não são necessários.
Antes da versão 55, o Chrome oferecia suporte a pan-x
e pan-y
, que restringem a rolagem
em uma direção.
O vídeo abaixo mostra um exemplo de elemento sem uma ação de toque definida (à esquerda), assim 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, foram adicionados pan-left
, pan-right
, pan-up
e pan-down
. 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 "puxar para atualizar", que só responde quando o usuário gesticular para baixo na tela.
O vídeo a seguir demonstra o pan-right
e o pan-down
, que
exigem gestos para começar da direita para a esquerda e de baixo para cima, respectivamente.
Depois que o gesto for iniciado, você pode mover para frente e para trás. Somente a direção inicial é afetada.
Embora o vídeo demonstre esse comportamento, pode ser mais fácil fazer um teste por conta própria consulte a amostra.
O CSS para esta demonstração é:
.pan-right {
touch-action: pan-right;
}
.pan-down {
touch-action: pan-down;
}
A última coisa que acontece 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 movimentação
(ou seja, pan-x
, pan-y
, pan-left
, pan-right
, pan-down
, pan-up
).
Se você fizer gesto de pinça em um site, ele geralmente aumentará o conteúdo da página.
Definir um touch-action
evita esse comportamento, mas o zoom por gesto de pinça
reativa esse comportamento.
Este vídeo mostra a diferença entre touch-action: pan-x
e
touch-action: pan-x pinch-zoom
.
Todas essas propriedades precisam simplificar parte da lógica que precisaria
ser implementada pelos desenvolvedores usando pointer-events
.