Addaw, ir a inicio Donar

Técnica Scripts de cliente WCAG 2.2

SCR40Quitar las animaciones de JavaScript si el usuario pide reducir el movimiento

Nombre oficial en el W3C: Usar JavaScript para evaluar la consulta de medios prefers-reduced-motion

En pocas palabras

Windows, macOS, Android e iOS tienen un ajuste para reducir el movimiento en pantalla. Desde JavaScript se puede saber si está activado con la consulta prefers-reduced-motion. Si lo está, las animaciones que se disparan al interactuar, como desplazamientos o efectos al hacer scroll, deben quitarse.

Por qué es importante

Algunas personas tienen trastornos vestibulares (problemas del sistema del equilibrio del oído interno). Un movimiento grande en pantalla les puede causar mareo, náuseas o dolor de cabeza. Otras personas, por ejemplo con déficit de atención, se distraen mucho con los movimientos.

Un caso típico es la portada que desliza bloques y fotos al hacer scroll. Si la web no respeta el ajuste del sistema, la persona no tiene forma de evitarlo.

Cómo se hace

  1. Consulte la preferencia con window.matchMedia('(prefers-reduced-motion: reduce)').
  2. Si matches es true, no ejecute la animación. Muestre directamente el estado final.
  3. Escuche el evento change de esa consulta. Así la web reacciona si la persona cambia el ajuste con la página abierta.
  4. Haga lo mismo en CSS con @media (prefers-reduced-motion: reduce) para las transiciones y animaciones de estilo.
  5. Mantenga solo el movimiento esencial, es decir, el que no se puede quitar sin perder información o función.

Cómo comprobarlo

  1. Active el ajuste del sistema. En Windows: Configuración, Accesibilidad, Efectos visuales, desactivar «Efectos de animación». En macOS: Ajustes del Sistema, Accesibilidad, Pantalla, «Reducir movimiento».
  2. También puede simularlo en Chrome: herramientas del navegador (F12), panel «Rendering», opción «prefers-reduced-motion: reduce».
  3. Recargue la página y use cada elemento que provoca movimiento: botones, scroll, pestañas, carruseles.
  4. Compruebe que las animaciones desaparecen o que las que quedan son realmente esenciales.

Ejemplo

Las tarjetas de una portada aparecen deslizándose, salvo si la persona ha pedido reducir el movimiento.

const reducir = window.matchMedia('(prefers-reduced-motion: reduce)');

function mostrarTarjeta(tarjeta) {
  if (reducir.matches) {
    tarjeta.style.opacity = 1; // aparece sin moverse
    return;
  }
  tarjeta.animate(
    [{ opacity: 0, transform: 'translateY(60px)' }, { opacity: 1, transform: 'none' }],
    { duration: 600, fill: 'forwards' }
  );
}
Ver el texto completo del W3C (traducción al español)

Esta es una traducción no oficial al español de la técnica SCR40 de Techniques for WCAG 2.2, del W3C. Puede contener errores. El único documento oficial y normativo es la versión original en inglés, publicada en el sitio web del W3C.

Aplicabilidad

Animaciones JavaScript que provocan movimiento y que se activan mediante interacciones del usuario.

Descripción

El objetivo de esta técnica es permitir que los usuarios eviten que se muestren animaciones (incluidas las animaciones con movimiento) en las páginas web, usando JavaScript para evaluar la consulta de medios (media query) CSS prefers-reduced-motion.

Algunos usuarios sufren distracción o náuseas con el contenido animado. Por ejemplo, si al desplazar una página los elementos se mueven (más allá del movimiento esencial asociado al desplazamiento del contenido, que está bajo el control del usuario), esto puede desencadenar trastornos vestibulares.

Las consultas de medios que activan o desactivan de forma selectiva las animaciones controladas por JavaScript según las preferencias del sistema operativo o del agente de usuario permiten a los usuarios evitar esos desencadenantes.

El documento de comprensión de Animaciones desde interacciones incluye enlaces para cambiar el ajuste de «reducir el movimiento».

Ejemplos

Evaluar la consulta de medios CSS prefers-reduced-motion en JavaScript

Los usuarios pueden indicar en su sistema su preferencia sobre el movimiento en las interfaces. Esta elección puede detectarse en JavaScript evaluando la consulta de medios CSS prefers-reduced-motion. El script puede entonces decidir si activa o desactiva los efectos de animación según el resultado de la prueba de la consulta de medios.

const mediaQueryList = window.matchMedia("(prefers-reduced-motion: no-preference)");
if (mediaQueryList.matches) {
  /* The user has not expressed a preference for reduced motion – run JavaScript-based animation */
}

Pruebas

Procedimiento

Para cada elemento interactivo que active una animación con movimiento como resultado de una interacción del usuario:

  1. Activar el ajuste de reducción del movimiento en el sistema;
  2. Comprobar que la animación con movimiento es esencial;
  3. Comprobar que la animación con movimiento se suprime.

Resultados esperados

  • La comprobación n.º 2 o la n.º 3 es verdadera.

Cómo lo comprobamos en ADDAW

En cada auditoría de ADDAW revisamos esta técnica página a página y le entregamos los errores con capturas y la forma de corregirlos.

Solicitar una auditoría

Basado en la técnica SCR40 del W3C (WCAG 2.2). Explicación y ejemplos: ADDAW. Traducción no oficial del texto del W3C © W3C, licencia de documentos del W3C. ¿Ha visto un error? Escríbanos.