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")
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 () { ...
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.
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é.
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;
});
});
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
});