web-dev-qa-db-fra.com

jQuery mobile - Pour chaque événement de prise en direct, devrait-il y avoir un événement de clic équivalent?

J'ai remplacé les événements jQuery live click par des événements jQuery mobile tap pour augmenter la réactivité.

J'ai le sentiment que c'était une mauvaise idée pour des raisons de compatibilité.

Est-il nécessaire d'avoir les deux événements et existe-t-il un moyen de les écrire tous les deux pour la même fonction?

Tels que ("cliquer", "toucher")

26
TaylorMac

La réponse de Billy est incroyablement complète et a très bien fonctionné les quelques fois où je l'ai utilisée. De plus, cependant, vous voudrez peut-être regarder le plugin vmouse dans JQuery Mobile , c'est une tentative d'abstraire les événements de souris:

 // This plugin is an experiment for abstracting away the touch and mouse
 // events so that developers don't have to worry about which method of input
 // the device their document is loaded on supports.

- https://github.com/jquery/jquery-mobile/blob/master/js/vmouse.js

J'ai joué avec lui sur un projet sur lequel je travaille, il semble assez réactif de nos jours. Pour utiliser, quelque chose comme:

$('selector').bind('vclick', function () { ...

ou

$('selector').bind('vmousedown', function () { ...
34
J.T.Sage

Vous pouvez lier plusieurs événements en un seul appel comme ceci:

$('selector').bind('click tap',function(){ ... })

Cela peut convenir à certains navigateurs/mobiles, mais cela peut déclencher deux fois les événements sur certains appareils qui déclenchent à la fois le tap et le click.

Vous pouvez résoudre ce problème en effectuant une sorte de détection de périphérique/fonctionnalité et en ajoutant le gestionnaire approprié uniquement comme ceci ...

$('selector').bind( myCustomDetectionFunction() ? 'click' : 'tap' ,function(){ ... })

De plus, je pense que touchstart et mousedown sont de meilleurs événements à choisir. En effet, après un toucher, l'événement de clic ne se déclenche pas avant qu'un délai ne soit écoulé, car le système permet à un deuxième toucher de faire un double clic ou de devenir un geste de balayage, etc. L'événement touchstart se déclenche immédiatement, tout comme mousedown devrait donc être plus réactif.

30
Billy Moon

Nous avons développé un petit script pour résoudre ce problème. Il suffit de l'inclure au niveau mondial et vos événements de clic seront déclenchés immédiatement sans aucun problème avec l'événement retardé.

https://github.com/cargomedia/jquery.touchToClick

10
Marcel Colomb

Il semble que jQuery mobile ait déjà un événement qui fait exactement cela:

$(function(){
    $('selector').bind('vclick', function(e){
        alert('test');    
        return false;
    });
});
4
h3.

Vous pouvez utiliser le plugin vmouse de jQuery. Cela résoudra le délai de 300 ms sur les événements de clic (mobile uniquement) ainsi que les cas où les événements de clic et de toucher sont déclenchés.

Pour obtenir uniquement le plugin vmouse, utilisez jQuery Mobile Download Builder . Incluez-le après jQuery mais avant tout script qui dépendra de ce plugin.

L'événement pertinent est vclick , l'utilisation de base est la suivante:

$(".selector").on( "vclick", function( event ) {
    // To execute
});
2
user2449231