Desejo desativar a funcionalidade de zoom de toque duplo em elementos especificados no navegador (em dispositivos de toque), sem desativar toda a funcionalidade de zoom .
Por exemplo: Um elemento pode ser tocado várias vezes para que algo aconteça. Isso funciona bem em navegadores de desktop (como esperado), mas em navegadores de dispositivos sensíveis ao toque, aumentará o zoom.
Respostas:
Observação (a partir de 2020-08-04): esta solução não parece funcionar no iOS Safari v12 +. Vou atualizar esta resposta e excluir esta observação assim que encontrar uma solução clara que cubra o iOS Safari.
Solução somente CSS
Adicione
touch-action: manipulation
a qualquer elemento em que deseja desativar o zoom de toque duplo, como com a seguintedisable-dbl-tap-zoom
classe:Dos
touch-action
documentos (grifo meu):Este valor funciona no Android e no iOS.
fonte
Usei-o recentemente e funciona bem no iPad. Não testei no Android ou outros dispositivos (porque o site será exibido apenas no iPad).
fonte
Eu sei que isso pode ser antigo, mas encontrei uma solução que funcionou perfeitamente para mim. Não há necessidade de meta tags malucas e parar de ampliar o conteúdo.
Não tenho 100% de certeza de como é cross-device, mas funcionou exatamente como eu queria.Isso simplesmente desativará a função de toque normal e, em seguida, chamará um evento de clique padrão novamente. Isso evita que o dispositivo móvel aplique zoom, mas funciona normalmente.
EDIT: Isso agora foi testado pelo tempo e rodando em alguns aplicativos ativos. Parece ser 100% cross-browser e plataforma. O código acima deve funcionar como uma solução de copiar e colar na maioria dos casos, a menos que você queira um comportamento personalizado antes do evento de clique.
fonte
pointer-events: none
Eu só queria responder minha pergunta adequadamente, pois algumas pessoas não leem os comentários abaixo de uma resposta. Então aqui está:
Eu não escrevi isso, apenas modifiquei. Encontrei a versão exclusiva para iOS aqui: https://gist.github.com/2047491 (obrigado Kablam)
fonte
CSS para desativar o zoom de toque duplo globalmente (em qualquer elemento):
Obrigado Ross, minha resposta se estende a dele: https://stackoverflow.com/a/53236027/9986657
fonte
document.getElementById('root').addEventListener('click', () => {})
Se você precisa de uma versão que funcione sem jQuery , modifiquei a resposta de Wouter Konecny (que também foi criada modificando esta essência por Johan Sundström ) para usar o JavaScript vanilla.
Em seguida, adicione um manipulador de eventos
touchstart
que chama esta função:fonte
myButton.addEventListener('touchstart', preventZoom);
Você deve definir a propriedade css
touch-action
paranone
, conforme descrito neste outra resposta https://stackoverflow.com/a/42288386/1128216fonte
Desative o toque duplo para aumentar o zoom em telas sensíveis ao toque. Internet explorer incluído.
fonte
Simples evitar o comportamento padrão
click
,dblclick
outouchend
eventos irá desactivar a funcionalidade de zoom.Se você já tiver um retorno de chamada em um desses eventos, basta chamar a
event.preventDefault()
.fonte
Se alguém como eu está enfrentando esse problema ao usar o Vue.js , basta adicionar .prevent para resolver o problema:
@click.prevent="someAction"
fonte
Isso impedirá o zoom de toque duplo em elementos no 'corpo', que pode ser alterado para qualquer outro seletor
Mas isso também evitou que meu evento de clique fosse acionado quando clicado várias vezes, então eu tive que vincular outro evento para acionar os eventos em vários cliques
No touchstart, adicionei o código para evitar o zoom e acionar um clique.
fonte
Presumo que tenho uma
<div>
área de contêiner de entrada com texto, controles deslizantes e botões e desejo inibir toques duplos acidentais nela<div>
. O seguinte não inibe o zoom na área de entrada e não se relaciona ao toque duplo e zoom fora da minha<div>
área. Existem variações dependendo do aplicativo do navegador.Eu apenas tentei.
(1) Para Safari no iOS e Chrome no Android, e é o método preferido. Funciona exceto para aplicativo de Internet na Samsung, onde desativa os toques duplos não totalmente
<div>
, mas pelo menos em elementos que controlam os toques. Ele retornareturn false
, com exceção detext
erange
entradas.(2) Opcionalmente para aplicativo de Internet integrado no Android (5.1, Samsung), inibe toques duplos no
<div>
, mas inibe o zoom em<div>
:(3) Para o Chrome no Android 5.1, desativa o toque duplo, não inibe o zoom e não faz nada sobre o toque duplo nos outros navegadores. O duplo toque inibidor do
<meta name="viewport" ...>
é irritante, pois<meta name="viewport" ...>
parece uma boa prática.fonte
Usando eventos de toque CSS: nenhum Elimina completamente todos os eventos de toque. Só deixando isso aqui caso alguém também tenha esse problema, demorei 2 horas para achar essa solução e é apenas uma linha de css. https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action
fonte
Aqui vamos nós
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
fonte