Tout en travaillant avec les événements du navigateur, j'ai commencé à intégrer les touchEvents de Safari pour les appareils mobiles. Je trouve que les addEventListener
s empilent avec des conditions. Ce projet ne peut pas utiliser JQuery.
Un écouteur d'événement standard:
/* option 1 */
window.addEventListener('mousemove', this.mouseMoveHandler, false);
window.addEventListener('touchmove', this.mouseMoveHandler, false);
/* option 2, only enables the required event */
var isTouchEnabled = window.Touch || false;
window.addEventListener(isTouchEnabled ? 'touchmove' : 'mousemove', this.mouseMoveHandler, false);
JQuery bind
permet plusieurs événements, comme ceci:
$(window).bind('mousemove touchmove', function(e) {
//do something;
});
Existe-t-il un moyen de combiner les deux écouteurs d'événements comme dans l'exemple JQuery? ex:
window.addEventListener('mousemove touchmove', this.mouseMoveHandler, false);
Toutes les suggestions ou conseils sont appréciés!
javascript
jquery
touch
addeventlistener
johnkreitlow
la source
la source
Réponses:
Dans POJS, vous ajoutez un auditeur à la fois. Il n'est pas courant d'ajouter le même écouteur pour deux événements différents sur le même élément. Vous pouvez écrire votre propre petite fonction pour faire le travail, par exemple:
Espérons que cela montre le concept.
Modifier 25/02/2016
Le commentaire de Dalgard m'a amené à revoir cela. Je suppose que l'ajout du même auditeur pour plusieurs événements sur un élément est plus courant maintenant pour couvrir les différents types d'interface utilisés, et la réponse d'Isaac offre une bonne utilisation des méthodes intégrées pour réduire le code (bien que moins de code soit, en soi , pas nécessairement un bonus). Extension avec les fonctions fléchées ECMAScript 2015:
Une stratégie similaire pourrait ajouter le même auditeur à plusieurs éléments, mais la nécessité de le faire pourrait être un indicateur de la délégation d'événements.
la source
"It is not common to add the same listener for two different events on the same element."
Parfois, les développeurs (plus verts) ont besoin d'entendre cela pour savoir qu'ils le font correctement :)Une syntaxe compacte qui permet d'obtenir le résultat souhaité, POJS:
la source
['mousemove', 'touchmove'].forEach(...)
['mousemove', 'touchmove'].forEach(function(event) { window.addEventListener(event, handler);});
serait non seulement beaucoup plus lisible, mais aussi beaucoup plus rapide de ne pas avoir à diviser la chaîne, puis à exécuter une fonction pour chaque élément du tableau résultant.Nettoyer la réponse d'Isaac:
ÉDITER
Fonction d'assistance ES6:
la source
Pour moi; ce code fonctionne bien et est le code le plus court pour gérer plusieurs événements avec les mêmes fonctions (en ligne).
la source
ES2015:
la source
for...of
boucleJ'ai une solution plus simple pour vous:
J'ai testé cela et cela fonctionne très bien, du côté positif, il est compact et simple comme les autres exemples ici.
la source
AddEventListener prend une chaîne simple qui représente event.type . Vous devez donc écrire une fonction personnalisée pour itérer sur plusieurs événements.
Ceci est géré dans jQuery en utilisant .split (""), puis en parcourant la liste pour définir les eventListeners pour chacun
types
.la source
Une façon de le faire:
la source