Mientras trabajaba con eventos del navegador, comencé a incorporar los eventos táctiles de Safari para dispositivos móviles. Encuentro que addEventListener
s se están acumulando con condicionales. Este proyecto no puede usar JQuery.
Un oyente de eventos estándar:
/* 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
permite múltiples eventos, así:
$(window).bind('mousemove touchmove', function(e) {
//do something;
});
¿Hay alguna manera de combinar los dos oyentes de eventos como en el ejemplo de JQuery? ex:
window.addEventListener('mousemove touchmove', this.mouseMoveHandler, false);
Cualquier sugerencia o consejo son apreciados!
javascript
jquery
touch
addeventlistener
johnkreitlow
fuente
fuente
Respuestas:
En POJS, agrega un oyente a la vez. No es común agregar el mismo oyente para dos eventos diferentes en el mismo elemento. Puede escribir su propia función pequeña para hacer el trabajo, por ejemplo:
Esperemos que muestre el concepto.
Editar 25-02-2016
El comentario de Dalgard me hizo revisar esto. Supongo que agregar el mismo oyente para múltiples eventos en un elemento es más común ahora para cubrir los diversos tipos de interfaz en uso, y la respuesta de Isaac ofrece un buen uso de los métodos integrados para reducir el código (aunque menos código es, en sí mismo) , no necesariamente una bonificación). Extendido con las funciones de flecha ECMAScript 2015 da:
Una estrategia similar podría agregar el mismo oyente a múltiples elementos, pero la necesidad de hacerlo podría ser un indicador para la delegación de eventos.
fuente
"It is not common to add the same listener for two different events on the same element."
A veces los desarrolladores (más ecológicos) necesitan escuchar esto para saber que lo están haciendo bien :)Alguna sintaxis compacta que logra el resultado deseado, POJS:
fuente
['mousemove', 'touchmove'].forEach(...)
['mousemove', 'touchmove'].forEach(function(event) { window.addEventListener(event, handler);});
no solo sería mucho más legible, sino que también sería mucho más rápido no tener que dividir la cadena y luego ejecutar una función para cada elemento en la matriz resultante.Limpiando la respuesta de Isaac:
EDITAR
Función auxiliar ES6:
fuente
Para mi; Este código funciona bien y es el código más corto para manejar múltiples eventos con las mismas funciones (en línea).
fuente
ES2015:
fuente
for...of
bucleTengo una solución más simple para ti:
He probado esto y funciona muy bien, por el lado positivo, es compacto y sencillo como los otros ejemplos aquí.
fuente
AddEventListener toma una cadena simple que representa event.type . Por lo tanto, debe escribir una función personalizada para iterar sobre múltiples eventos.
Esto se maneja en jQuery usando .split ("") y luego iterando sobre la lista para establecer los EventListeners para cada uno
types
.fuente
Una forma de hacerlo:
fuente