6
votes

JavaScript sur iOS: PreventDefault sur TouchStart sans désactiver le défilement

Je travaille avec JavaScript et JQuery dans une UIWEVVIEW sur iOS.

I'v a ajouté du gestionnaire d'événements JavaScript qui permettez-moi de capturer un événement tactile et de maintien pour afficher un message lorsque quelqu'un tape un img pendant un certain temps: xxx

Cela fonctionne bien pour montrer le message. J'ai ajouté les deux "Event.PreventDefault ();" lignes pour arrêter les imgs à l'intérieur des liens pour déclencher le lien.

Le problème est le suivant: Cela semble également empêcher les événements de drags pour faire défiler la page de se produire normalement, de sorte que l'utilisateur ne puisse pas faire défiler quand son Swipe arrive à commencer sur un img.

Comment puis-je désactiver l'action de liaison par défaut sans interférer avec le défilement?


1 commentaires

J'ai tiré mes cheveux nos cheveux pour ce problème ..... shittttt


3 Réponses :


7
votes

Parfois, vous devez poser une question sur le débordement de la pile pour trouver la réponse vous-même. Il y a en effet une solution à mon problème, et c'est comme suit: xxx

explication
  • Pas de préventiveDefault () dans les gestionnaires d'événements tactiles. Cela ramène le comportement de défilement (bien sûr).
  • gérer un événement de clic normal une fois si le message est apparu et empêche c'est action par défaut.


0 commentaires

1
votes

Vous pouvez regarder une bibliothèque de gestes comme Hammer.js qui couvre tous les principaux Événements de geste sur des appareils.


0 commentaires

10
votes

Vous m'avez mis sur la bonne voie Stefan, m'avoir pensé à penser à l'inverse. Pour que tout le monde se gratte la tête sur ceci, voici ma solution.

J'essayais d'autoriser les visiteurs à faire défiler les images horizontalement, sans casser le défilement vertical. Mais j'exécute une fonctionnalité personnalisée et j'attendais qu'un rouleau vertical se produise. Au lieu de cela, nous devrions permettre un comportement régulier d'abord et attendre qu'un geste spécifique se produise comme Stefan le faisait.

par exemple: xxx

donc nous autorisons par défaut Comportement jusqu'à ce que le mouvement horizontal dépasse 50 pixels.

La variable touché Assurez-vous que notre fonction fonctionne toujours si nous entrons dans la zone de <50 pixels initiale.

(Remarque Ceci est exemple code, e.originalevent.touches [0] .pagex n'est pas compatible avec le navigateur croisé.)


2 commentaires

Juste curieux, mais ne devrait-il pas être un au lieu de sur pour touchend ? N'a pas essayé le code, mais il semble que cela puisse se lier trop de fois pour toucher, alors qu'il devrait y avoir une touche tactile de 1 à 1 au ratio touchend.


Bonne question. Il devrait s'embindonner (et le touchmove la liaison) instantanément, mais toujours, un pourrait effectivement fonctionner plus efficacement. N'hésitez pas à déconner avec elle et à voir ce qui fonctionne mieux.