Safari iPad 1: comment désactiver le zoom / centrage sur un double-tap, mais garder le pincement zoom
Je me demande si son possible pour éviter le double-tap-to-zoom et double-tap-to-centre sur un élément HTML dans Safari iOS (iPad 1) ?
Car ma petite HTML5 jeu force les utilisateurs à prendre rapidement des clics (ou tap), qui sont interprétés comme un double-clic, et quand il arrive - le changement de page, de zoom et de centres de lui-même.
La détection de double clique (comme dans cette réponse - Safari iPad : prévenir appuyez deux fois pour zoomer) sent mauvais..
Mauvaise réponse #1:
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
- ne convient pas a mes fins, car il bloque tout de zoom.
Mauvaise réponse #2: peut-être serait .preventDefault()
sur l'événement click suffit pour cela ? - N'a aucun effet.
source d'informationauteur c69
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas d'autre moyen que de rattraper les événements que vous souhaitez éviter, et d'appeler
preventDefault()
sur eux, comme vous l'avait déjà plus ou moins compris.En effet, certaines propriétés CSS /valeurs peuvent changer le site global de comportement (largeur fixe ou
fixed
par exemple), mais vous n'êtes pas à l'abri des changements de l'OS (voirfixed
la gestion du changement dans iOS5), ni de faire ces changements nécessairement empêcher tout comportement (pincement peut être désactivé, mais pas de double-tapping).Donc, la meilleure façon de désactiver le comportement par défaut uniquement pour double-cliquer sur est de profiter de la le comte de la touche iOS fournit: si nous avons un seul contact, alors nous sommes en appuyant sur. De deux, cela signifie que nous pincer.
Suivants de code de configuration fournit cette fonctionnalité:
Démo sur jsFiddle.
Remarque: le troisième paramètre (
true
) àaddEventListener
signifie que nous voulons la capture des événementsc'est de les attraper tous, même pour nos descendant enfants.Je suis la prévention doubletaps comme ceci:
L'élégance réside dans le fait, qu'aucun délais d'attente sont nécessaires. J'ai uniquement la mise à jour d'un timestamp. C'est seulement par rapport à la prochaine évènements touchstart. Fonctionne pour moi sur iOS 6.
Doubletaps plus bas dans les dom ne sont pas affectés.
La même fonctionne sans jQuery, ainsi:
J'ai écrit un plugin jQuery dans le même but, de manière sélective la désactivation appuyez deux fois sur zoom sur des éléments de la page (dans mon cas, les boutons de navigation pour tourner les pages) je tiens à répondre à chaque robinet (y compris double-tap) comme un événement de clic, sans iOS "touche magique", peu importe à quelle vitesse l'utilisateur clique dessus.
À utiliser, il suffit de lancer quelque chose comme
$('.prev,.next').nodoubletapzoom();
sur les éléments dont vous vous occupez. Le principe dont il se sert pour écouter consécutivestouchstart
événements sur un nœud au sein d'500ms, et en cours d'exécutionevent.preventDefault()
sur la deuxième, à moins que d'autres touches sont actives en même temps. En tant que preventDefault consomme le touche, nous avons également synthétiser les deux "raté", cliquez sur événements pour le nœud, de sorte que votre action de contact qui se passe autant de fois que l'utilisateur prévu.Apple a beaucoup de conseils spécialisés dans les balises pour webkit (Safari). Vue Officiel Docs
Ce que la version iOS/navigateur Safari utilisez-vous? Le site le plus certainement ne vous permet pas de double-tap. J'ai trouvé un peu de CSS mais je n'ai pas eu le temps de l'essayer car je suis sur le point de sortir:
Vous aurez besoin de mettre en œuvre une double fonction tap et
preventDefault
sur le deuxième robinet. Voici quelques testé le code qui utilise des variables globales qui devraient vous aider à démarrer:Et un violon: http://jsfiddle.net/brettwp/J4djY/
JQuery approche de désactiver le Double Appuyez sur Zoom dans MVC4
Pour Désactiver le double tap (double de la souris vers le bas) fonctionnalités sur iOS 1+ vous avez besoin pour attraper les évènements touchstart de l'Événement et de créer un remplacement pour empêcher le zoom.
//En utilisant un Seul script.js et JQuery.Mobile-1.2.0 de l'INTERFACE utilisateur de chaque page dans MVC est affectée JQuery par l'intermédiaire de délégués de sorte que vous n'avez pas à faire une actualisation complète de la page vous permettant de tirer parti des données-prefetch qui charge la page dans les DOM lorsque l'application se charge pour la première fois
$(document).délégué("#CashRegister", "pageinit", function () {
En fait, .preventDefault() certainement fonctionne... à l'aide de jQuery:
Votre problème avec le fait d'essayer de les prévenir .cliquez sur (), c'est que le navigateur n'est pas à jeter un "clic" de l'élément. Safari ne se déclenche un clic pour aider à simuler un clic... Mais quand il y a un onglet à double, Safair n'est pas par le biais d'un "clic" de l'élément. Votre gestionnaire d'événement pour
.click()
ne jamais le feu, et, par conséquent, la.preventDefault()
ne pas le feu non plus.