No se puede evitar el detector de eventos pasivo interno predeterminado debido a que el objetivo se trata como pasivo.

Unable Preventdefault Inside Passive Event Listener Due Target Being Treated

Recientemente escribí un proyecto de capacitación basado en dispositivos móviles que usa fastclick. Cuando hago clic en el mismo DOM varias veces, desde la segunda vez, la consola de Chrome tendrá una advertencia, aunque no afecta la ejecución del código, pero sigue buscando. A veces.

|_+_|

Usé el escenario dos y escribí en el estilo CSS global. Unable to preventDefault inside passive event listener due to target being treated as passive.



Déjame hablar de la solución:

  • Opción 1:
    • Al registrar un controlador, declare explícitamente que no es pasivo de la siguiente manera
      |_+_|
  • opcion 2
    • Aplicar propiedades CSS touch-action: none De esta manera, cualquier evento táctil no producirá un comportamiento predeterminado, pero window.addEventListener('touchmove', func, { passive: false }) El evento se desencadena como de costumbre.
      touch-action: none Todavía hay muchas opciones, consulte los detalles. touch



      [Nota]: Posibles elementos del futuro touch-action El controlador de eventos estará predeterminado en touch-action



la razón:

Dado que el navegador debe ejecutar el controlador de eventos antes de saber si se ha utilizado preventDefault () o no, esto hace que el navegador no responda al desplazamiento a tiempo, con un ligero retraso.

Entonces, para que el desplazamiento de la página sea fluido, los controladores de eventos touchstart y touchmove se registraron en la ventana, el documento y el cuerpo, comenzando con chrome56, por defecto en pasivo: verdadero. El navegador ignora preventDefault () y se desplaza por la primera vez.

Ejemplo:
|_+_|
|_+_|



Esto conduce a un problema:

Si en los tres elementos anteriores touchstart touchmove con passive: true Llamado en el controlador de eventos wnidow.addEventListener('touchmove', func) has the same effect as the following sentence , será ignorado por el navegador y no bloqueará el comportamiento predeterminado.
Prueba:

|_+_|

direccion original