Animationen beim Ändern der Fenstergröße stoppen

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Nehmen wir an, Sie haben eine Seite mit vielen Übergängen und Animationen auf verschiedenen Elementen. Einige davon werden beim Ändern der Fenstergröße ausgelöst, da sie mit der Größe der Seite, der Position, dem Padding oder ähnlichem zu tun haben. Es spielt keine Rolle, was es ist, die Tatsache, dass der Übergang oder die Animation ausgeführt wird, kann zu einem Gefühl der Ruckeligkeit beim Ändern der Fenstergröße beitragen. Wenn diese Übergänge oder Animationen in diesen Szenarien keinen Nutzen bringen, können Sie sie ausschalten!

Der Trick besteht darin, eine Klasse anzuwenden, die alle Übergänge und Animationen universell abschaltet.

let resizeTimer;
window.addEventListener("resize", () => {
  document.body.classList.add("resize-animation-stopper");
  clearTimeout(resizeTimer);
  resizeTimer = setTimeout(() => {
    document.body.classList.remove("resize-animation-stopper");
  }, 400);
});

Jetzt haben wir eine resize-animation-stopper-Klasse im <body>, die jede Übergangs- oder Animationsdauer während der Fenstergrößenänderung erzwingen kann und nach Ablauf des Timeouts verschwindet.

.resize-animation-stopper * {
  animation: none !important;
  transition: none !important;
}

Es gibt wahrscheinlich eine leistungsfähigere Methode als setTimeout, aber das ist das Konzept. Ich verwende dies hier auf dieser Website (v17), nachdem ich erhebliche Ruckler bei der Größenänderung bemerkt habe. Es hat die Ruckler nicht vollständig beseitigt, aber es ist merklich besser.

Hier ist ein Beispiel:

Siehe den Pen
Animation beim Ändern der Größe deaktivieren?
von Chris Coyier (@chriscoyier)
auf CodePen.

Dieses Demo ist hauptsächlich für den funktionierenden Code gedacht. Es gibt wahrscheinlich nicht genug Übergänge, um viele Ruckler beim Ändern der Größe zu bemerken.