Während ich mit Browserereignissen arbeite, habe ich begonnen, Safari's touchEvents für mobile Geräte zu integrieren. Ich finde, dass sich addEventListener
s mit Bedingungen stapeln. Dieses Projekt kann JQuery nicht verwenden.
Ein Standard-Ereignis-Listener:
/* 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's bind
erlaubt mehrere Ereignisse, wie zum Beispiel:
$(window).bind('mousemove touchmove', function(e) {
//do something;
});
Gibt es eine Möglichkeit, die beiden Ereignis-Listener wie im JQuery-Beispiel zu kombinieren? Ex:
window.addEventListener('mousemove touchmove', this.mouseMoveHandler, false);
Anregungen oder Tipps sind willkommen!
javascript
jquery
touch
addeventlistener
Johnkreitlow
quelle
quelle
Antworten:
In POJS fügen Sie jeweils einen Listener hinzu. Es ist nicht üblich, denselben Listener für zwei verschiedene Ereignisse auf demselben Element hinzuzufügen. Sie könnten Ihre eigene kleine Funktion schreiben, um die Arbeit zu erledigen, z.
Hoffentlich zeigt es das Konzept.
Bearbeiten 2016-02-25
Dalgards Kommentar veranlasste mich, dies noch einmal zu überdenken. Ich denke, dass das Hinzufügen des gleichen Listeners für mehrere Ereignisse zu einem Element jetzt häufiger ist, um die verschiedenen verwendeten Schnittstellentypen abzudecken, und Isaacs Antwort bietet eine gute Verwendung integrierter Methoden, um den Code zu reduzieren (obwohl weniger Code für sich ist , nicht unbedingt ein Bonus). Die mit ECMAScript 2015 erweiterten Pfeilfunktionen bieten:
Eine ähnliche Strategie könnte denselben Listener zu mehreren Elementen hinzufügen, aber die Notwendigkeit, dies zu tun, könnte ein Indikator für die Ereignisdelegierung sein.
quelle
"It is not common to add the same listener for two different events on the same element."
Manchmal müssen (grünere) Entwickler dies hören, um zu wissen, dass sie es richtig machen :)Eine kompakte Syntax, die das gewünschte Ergebnis erzielt, POJS:
quelle
['mousemove', 'touchmove'].forEach(...)
['mousemove', 'touchmove'].forEach(function(event) { window.addEventListener(event, handler);});
Dies wäre nicht nur viel besser lesbar, sondern auch viel schneller, wenn die Zeichenfolge nicht geteilt und dann für jedes Element im resultierenden Array eine Funktion ausgeführt werden müsste.Aufräumen von Isaacs Antwort:
BEARBEITEN
ES6-Hilfsfunktion:
quelle
Für mich; Dieser Code funktioniert einwandfrei und ist der kürzeste Code, um mehrere Ereignisse mit denselben (Inline-) Funktionen zu behandeln.
quelle
ES2015:
quelle
for...of
SchleifeIch habe eine einfachere Lösung für Sie:
Ich habe dies getestet und es funktioniert großartig. Auf der positiven Seite ist es kompakt und unkompliziert wie die anderen Beispiele hier.
quelle
AddEventListener verwendet eine einfache Zeichenfolge, die event.type darstellt . Sie müssen also eine benutzerdefinierte Funktion schreiben, um mehrere Ereignisse zu durchlaufen.
Dies wird in jQuery behandelt, indem .split ("") verwendet und dann die Liste durchlaufen wird, um die eventListeners für jede festzulegen
types
.quelle
Ein Weg, wie es geht:
quelle