03 Capítulo 3 · Lección 13

Animation Play State

Redactado por
Author Sebastian V.
Fecha de publicación

26/04/2025

Tiempo de lectura

6 min

Tema

@keyframes

El botón de pausa de tu animación

Imagina que estás viendo un video y alguien te habla. Pulsas pausa, respondes, y cuando vuelves a pulsar play, el video no empieza desde el principio; continúa exactamente donde lo dejaste. Eso es exactamente lo que hace animation-play-state.

A diferencia de quitarle el nombre de la animación a un elemento (lo cual resetearía la animación de vuelta a 0 de inmediato), alterar el play-state congela los valores de todos los estilos interpolados en ese milisegundo exacto de la línea de tiempo.

Los dos únicos estados

  • running: (Por defecto) La animación avanza por su línea de tiempo normalmente.
  • paused: La animación se congela. El reloj se detiene y el elemento mantiene exactamente los estilos interpolados que tenía en ese instante.

El caso de uso más importante: accesibilidad y UX

Hay una regla fundamental en accesibilidad web y diseño premium: nunca asumas que a todos los usuarios les gusta el movimiento constante. Para personas con desórdenes vestibulares o problemas de atención, una marquesina de logos moviéndose infinitamente hace que leer el resto de la página sea sumamente difícil.

El patrón de diseño más elegante para solucionar esto es pausar las animaciones cuando el usuario posiciona el cursor sobre ellas (:hover). Esto le devuelve el control al usuario de forma intuitiva sin necesidad de escribir una sola línea de JavaScript:

> _
.marquee-container:hover .marquee-track {
  animation-play-state: paused;
}

Pausas interactivas con JavaScript

Cuando el control de la pausa no depende del puntero sino de la lógica de negocio (por ejemplo, pausar una animación de fondo al abrir el menú principal), usar JavaScript para alternar una clase utilitaria es la forma profesional de hacerlo.

Consejo profesional

Pausar animaciones pesadas cuando no están visibles en pantalla (por ejemplo, fuera del viewport mediante un IntersectionObserver) es una técnica excelente para reducir drásticamente el consumo de batería en smartphones.

Ejemplo práctico

> _
<div class="interactive-control">
  <div class="control-box animate-box">Genesis</div>
  <button id="toggle-play-btn" class="control-btn">Pausar</button>
</div>
> _
Genesis

Haz clic en el botón de abajo para pausar o reanudar el movimiento orbital del círculo en su posición exacta actual.

Errores comunes

01
Re-declarar la animación al pausar No re-escribas la propiedad "animation" completa al pausar, ya que esto reiniciará la animación. Solo altera "animation-play-state".
02
Olvidar la accesibilidad en loops continuos Los usuarios propensos a mareos por movimiento aprecian la posibilidad de detener animaciones en constante movimiento. Un play/pause es un gran detalle de A11y.

Practica lo aprendido

Utiliza el botón interactivo para alternar el estado de ejecución y observa cómo se detiene instantáneamente.

01 Usa animation-play-state: paused para congelar una animación en su punto actual
02 Prueba a cambiar a paused al hacer hover (:hover) sobre el elemento
03 Implementa un interruptor por JavaScript alternando la clase con animation-play-state