JS: Comment fonctionne la propriété event.touches?

Je ne comprends pas comment utiliser la propriété event.touches. Par exemple, pour obtenir le nombre de doigts sur un iPad / iPhone, vous devez utiliser

event.touches.length 

Alors pourquoi cet exemple de code ne fonctionne-t-il pas?

 $('.image').bind('touchstart', function(event) { alert(event.touches.length); }); 

Mais cela fonctionne:

 $('.image').bind('touchstart', function() { alert(event.touches.length); }); 

Ne devrait-ce pas être l’inverse?

Dans le second cas, vous vous rabattez sur l’object event global (et brut) du navigateur plutôt que sur l’object spécifique à jQuery (sur les navigateurs prenant en charge un event global, tous ne le font pas – Firefox non une chose de Microsoft que seuls quelques-uns ont copié).

Il semble que jQuery ne transmette pas la propriété touches dans son object événement personnalisé. Comme décrit dans la documentation de l’object event , vous pouvez utiliser event.originalEvent dans votre premier exemple pour accéder aux “propriétés spéciales” dont il dispose tout en bénéficiant des avantages de l’object événement normalisé jQuery, par exemple:

 $('.image').bind('touchstart', function(event) { alert(event.originalEvent.touches.length); }); 

… ou vous pouvez dire à jQuery de copier cette propriété en le faisant une fois au début de votre script:

 jQuery.event.props.push("touches"); 

… après quoi votre premier exemple devrait commencer à fonctionner.


Note latérale: Si vous n’utilisez pas jQuery Touch , vous pouvez le regarder. Mon hypothèse est qu’en plus des autres choses qu’il fait, il ajoute la propriété touches comme indiqué ci-dessus (mais ce n’est qu’une hypothèse).