Détecter un glissement de doigt à l'aide de JavaScript sur iPhone et Android
Comment pouvez-vous détecter qu'un utilisateur de glisser son doigt dans la direction de plus d'une page web avec JavaScript?
Je me demandais si il y avait une solution qui pourrait fonctionner pour les sites web sur l'iPhone et téléphone Android.
Pour balayez vers la reconnaissance, je vous recommande Hammer.js. Elle est très petite, et il prend en charge de nombreux gestes: - Balayez - Rotation - une Pincée - Presse (temps d'attente) - Tap - Pan
... et Windows Phone 8.1 et Windows 10 Mobile serait génial.
... et Windows Phone 8.1 et Windows 10 Mobile serait génial.
OriginalL'auteur 827 | 2010-02-15
Vous devez vous connecter pour publier un commentaire.
Simple à la vanille JS exemple de code:
Testé sur Android.
touchstart
,touchmove
?caniuse.com/#feat=touch
Il fonctionne très bien mais a un problème de détection de mouvements de droite. Je vais poster une autre réponse à ce sujet, qui fixe ce que JQuery (bureau) solution. Il ajoute également de la souris version de ces balayez les événements et ajouter une sensibilité option.
Cela fonctionne très bien, mais à gauche/droite et haut/bas sont à l'envers.
originalEvent est un JQuery propriété. Il devrait être laissé de côté si vous exécutez pure sans javascript JQuery. Le code actuel soulève une exception s'exécuter sans JQuery.
OriginalL'auteur givanse
J'ai trouvé cette jquery touchwipe plugin qui fonctionne sur mes deux première génération de l'ipod touch et mon droid incredible.
http://www.netcu.de/jquery-touchwipe-iphone-ipad-library
Fonctionne bien et simple, merci. J'ai modernisé et utiliser jQuery événements: github.com/marcandre/detect_swipe
Ce plugin est génial! léger et facile à utiliser!!
C'est un plugin très simple pour balayez vers le but. mais il ne fonctionne pas sur les appareils Windows Phone. Quelqu'un a rencontré ce genre de problèmes et comment ont-ils résoudre,
Lafortune, j'ai utilisé votre plugin, je dois avouer que c'est l'un des plus facile à utiliser. Mon seul problème est qu'il ne fonctionne pas sur windows phone. Est-il de toute façon à résoudre ce problème?
OriginalL'auteur DaiLak
Basé sur @givanse réponse, c'est comment vous pourriez le faire avec
classes
:Que vous pouvez l'utiliser comme ceci:
.bind
de undefined, car votrehandleTouchMove
, en fait, ne rien retourner. aussi il est inutile de les appeler bind lors de l'appel de la fonction avecthis.
parce que c'est déjà lié au contexte actuelJ'ai juste enlevé
.bind(this);
et cela a fonctionné normalement. merci @nicholas_rvous êtes les bienvenus
Obtenir l'élément de vous-même, je viens de supprimer le caractère " # " dans le document.getElementById('mon-element") et ça fonctionnait bien. Merci @Marwelln 🙂
Si vous voulez attendre jusqu'à ce que le balayage se TERMINE (sens après qu'elles lèvent le doigt ou onmouseup), changement
touches[0]
àchangedTouches[0]
et le gestionnaire d'événement de typehandleTouchMove
àhandleTouchEnd
OriginalL'auteur Marwelln
Avez-vous essayé hammer.js? http://eightmedia.github.com/hammer.js/
Fonctionne également sur Windows phone..
OriginalL'auteur Jorik
ce que j'ai utilisé avant que vous avez à détecter l'événement mousedown, enregistrer sa localisation x,y (selon ce qui est pertinent), puis de détecter l'événement mouseup, et la différence entre les deux valeurs.
OriginalL'auteur helloandre
jQuery Mobile comprend également glisser support: http://api.jquerymobile.com/swipe/
Exemple
OriginalL'auteur Grinn
J'ai fusionné quelques réponses ici dans un script qui utilise CustomEvent à feu glissée événements dans les DOM. Ajouter l'0,7 k swiped-events.min.js script à votre page et écouter pour glissée événements:
glissée gauche
glissée droit
glissée -
glissée-bas
Vous pouvez aussi joindre directement à un élément:
Option config
Vous pouvez spécifier les attributs suivants pour ajuster la façon dont balayez vers des fonctions d'interaction dans votre page (ces options sont facultatives).
Code Source est disponible sur Github
si vous soulevez un tique sur le dépôt github avec suffisamment d'informations pour me permettre de reproduire le problème, je vais le regarder
fonctionne très bien, merci !
OriginalL'auteur John Doherty
J'ai trouvé @givanse brillante réponse la plus fiable et compatible sur plusieurs navigateurs mobiles pour l'enregistrement de balayage actions.
Cependant, il ya un changement dans son code nécessaire pour le faire fonctionner à l'époque moderne, les navigateurs mobiles qui sont à l'aide de
jQuery
.event.touches
ne pas exister sijQuery
est utilisée et les résultats dansundefined
et devrait être remplacé parevent.originalEvent.touches
. SansjQuery
,event.touches
devrait fonctionner correctement.Donc, la solution devient,
Testé sur:
Comme par ce AFIN de répondre, un événement tactile si pris en charge par le navigateur sera exposée à travers
event.originalEvent
. Le truc, c'estevent.touches
a cessé d'exister maintenant et les résultats dansundefined
.de l'événement.touche seulement cessé d'exister lors de l'utilisation de JQuery. Tentez votre code sans JQuery et vous obtiendrez un message d'erreur qui evt.originalEvent est pas défini. JQuery totalement remplace événement avec sa propre et des met le navigateur natif de l'événement dans originalevent. Version courte: Votre code ne fonctionne qu'avec JQuery. Il fonctionne sans JQuery si vous supprimez originalevent.
Ouais j'ai fait des recherches un peu et de réaliser que vous aviez raison au sujet de la disponibilité de jquery permettant
event.originalEvent
. Je vais mettre à jour ma réponse. Merci! 🙂OriginalL'auteur nashcheez
J'ai remballé
TouchWipe
comme un court plugin jquery:detectSwipe
OriginalL'auteur Marc-André Lafortune
Certains mod de la reine de réponse(pas de commentaire...) pour traiter à court glisse
OriginalL'auteur rmnsh
trashold, le délai d'attente de balayage, swipeBlockElems ajouter.
OriginalL'auteur Sergey Guns
Si quelqu'un est d'essayer d'utiliser jQuery Mobile sur Android et a des problèmes avec JQM balayez vers la détection
(J'ai eu quelques sur le Xperia Z1, Galaxy S3, Nexus 4 et certains téléphones Wiko trop) cela peut être utile :
Glisser sur android n'est pas détecté, sauf s'il a été très longue, précise et rapide geste de la main.
Avec ces deux lignes, il fonctionne correctement
$.event.special.swipe.scrollSupressionThreshold = 8;
mais vous me mettez dans le bon sens! Merci!!!!OriginalL'auteur Rayjax
J'ai eu du mal avec touchend gestionnaire de tir en continu alors que l'utilisateur a glisser un doigt autour de. Je ne sais pas si c'est dû à quelque chose que je fais mal ou pas, mais je l'ai refaite cette accumuler déplace avec touchmove et touchend en fait les feux de la fonction de rappel.
J'ai aussi besoin d'avoir un grand nombre de ces cas et j'ai donc ajouté activer/désactiver des méthodes.
Et un seuil où un court de balayage n'est pas le feu. Évènements touchstart zéro les compteurs à zéro à chaque fois.
Vous pouvez modifier la target_node à la volée. Activer sur la création est facultative.
OriginalL'auteur Trendal Toews
Utilisé deux:
jQuery mobile: de travail dans la plupart des cas, et spécialement lorsque vous êtes en développement applicaion qui utilise d'autres plugin jQuery alors préférable d'utiliser jQuery mobile contrôles. Le visiter ici: https://www.w3schools.com/jquerymobile/jquerymobile_events_touch.asp
Marteau Temps ! l'un des meilleurs,léger et rapide basé sur javascript library. Le visiter ici: https://hammerjs.github.io/
OriginalL'auteur Star
J'ai fusionné quelques unes des réponses, surtout la première et la deuxième avec des classes, et voici ma version:
Par la suite peut l'utiliser comme suit:
Il aide à éviter les erreurs de la console lorsque vous souhaitez appeler uniquement disons "onLeft" la méthode.
OriginalL'auteur Romanna Semenyshyn