Comment puis-je empêcher le comportement par défaut de la touchmove événement dans iOS 5?
J'ai une application basée sur le web qui comprend un élément que l'utilisateur peut faire défiler avec le doigt. J'utilise le cas de la méthode preventDefault pour empêcher le comportement par défaut lorsque la touche move déplace tout autour de l'écran sur les appareils iOS.
Malheureusement, cela ne semble pas fonctionner sous iOS 5 qui je l'ai juste mis à jour pour ce matin. Je suppose que c'est juste fait différemment dans iOS 5, mais je ne suis pas encore en mesure de trouver une ressource qui fournit des instructions.
Merci!
Mise à jour #1: je n'ai pas été en mesure de trouver une réponse à ma question particulière, mais j'ai pu régler mon code un peu à utiliser l'-webkit-débordement-le défilement de style (une valeur de "toucher") et de mettre en œuvre les snazzy le défilement à inertie capacité (où le contenu défile plus rapidement selon la vitesse de votre balayage et "bande de caoutchouc de rebond" de retour si elle atteint les limites. Assez cool...
Mise à jour #2: j'ai un autre problème étrange maintenant. Pour une raison étrange, que le trop-plein du comportement de défilement se mélange parfois avec lequel vous devez faire glisser votre doigt vers la gauche et la droite sur l'élément contenant afin de rendre son contenu déplacer vers le haut et vers le bas. Je ne suis pas encore en mesure de comprendre pourquoi cela se produit - quelqu'un a une idée???
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution très simple. Lorsque l'événement arrive dans votre élément qui est autorisé à faire défiler, simplement marquer l'événement. Sur l'écouteur d'événement sur le document il suffit de vérifier si l'indicateur est défini et arrêter seulement le cas si l'indicateur n'est pas défini:
Vous pouvez également utiliser de l'événement.stopImmediatePropagation au lieu de cela, si vous n'avez pas besoin de l'eventListener sur l'élément de document, mais cela casse zepto.js
tap
dans mon cas:Tout d'abord, je peux vérifier que l'e.preventDefault() désactive le défilement dans iOS 5 en utilisant le code suivant:
Malheureusement, cependant, cela désactive le défilement sur l'overflow:scroll divs. (Si quelqu'un a une solution pour que les feuilles à l'intérieur de l'élément de défilement est activé, s'il vous plaît partager.)
Concernant la mise à jour#2, j'ai remarqué un comportement étrange quand il y a un défilement de l'élément imbriqué dans un autre élément déroulant (y compris la page elle-même). Parfois, l'appareil hésite sur quel élément que l'utilisateur a l'intention de les faire défiler. En particulier, j'ai remarqué ce problème à l'aide de la position:fixed. Ma solution était de s'assurer que le corps a 100% de la hauteur et que le défilement des éléments d'utiliser position:absolute lorsque cela est possible.
if($(e.currentTarget).css('overflow') != 'scroll') e.preventDefault();
. Puisque le document.ontouchmove se déclenche après l'scollable de l'élément ontouchmove, vous pourriez faireel.ontouchmove = function() {allowScroll = true}
puis ontdocument.ontouchmove
utiliser cette valeur pour déterminer l'action, puis définissez la valeur à false.