animation-trigger CSS property
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die CSS-Eigenschaft animation-trigger legt fest, ob auf einem Element deklarierte CSS-Animationen durch Trigger ausgelöst werden und, falls ja, welche Trigger dies sind und wie sich die Animationen verhalten, wenn der Trigger aktiv oder inaktiv wird. Damit lassen sich scrollgesteuerte Animationen mit Triggern erstellen.
Syntax
/* Keywords */
animation-trigger: none;
/* One trigger */
animation-trigger: --my-trigger play;
animation-trigger: --my-other-trigger play-once;
animation-trigger: --my-trigger play-forwards play-backwards;
animation-trigger: --my-other-trigger play reset;
/* Multiple values */
animation-trigger:
none,
-forwards play-backwards,
--my-other-trigger play reset;
/* Global values */
animation-trigger: inherit;
animation-trigger: initial;
animation-trigger: revert;
animation-trigger: revert-layer;
animation-trigger: unset;
Werte
Der Wert wird als kommagetrennte Liste angegeben. Jeder Eintrag ist entweder das Schlüsselwort none oder ein <dashed-ident>, gefolgt von einem oder zwei <animation-action>-Werten.
none-
Die zugehörige Animation wird nicht durch einen Trigger ausgelöst.
<dashed-ident>-
Ein benutzerdefinierter Bezeichner für den Namen des Triggers, der die Animation auslöst.
<animation-action>-
Ein
<animation-action>-Wert: eines der Schlüsselwörternone,play,play-forwards,play-backwards,play-once,pause,replayoderreset.
Beschreibung
Die Eigenschaft animation-trigger legt fest, welcher Trigger die Animationen eines animierten Elements steuert. Ein anderer Wert als none macht die Animation zu einer scrollgesteuerten Animation mit Trigger.
Einen Trigger definieren
Der Trigger wird durch einen <dashed-ident>-Wert identifiziert, der in der Eigenschaft timeline-trigger-name des beobachteten Elements definiert ist.
Zum Beispiel:
.animated {
animation: rotate 3s infinite linear both;
animation-trigger: --my-trigger play;
}
In diesem Fall wird die Animation abgespielt, wenn ein Element mit dem timeline-trigger-name --my-trigger in den für den Trigger definierten Aktivierungsbereich eintritt.
Hier erstellen wir einen Trigger, indem wir timeline-trigger-name über die Kurzschreibweise timeline-trigger festlegen. .trigger kann ein beliebiges Element sein, auch das Element .animated.
.trigger {
timeline-trigger: --my-trigger view();
}
Wenn für ein Element sowohl eine Animation als auch animation-trigger festgelegt ist, aber kein scrollendes Element existiert, dessen timeline-trigger-name denselben <dashed-ident>-Wert hat, besitzt die Animation keinen Trigger und wird daher nie abgespielt.
Aktionen für die ausgelöste Animation definieren
Der Wert von animation-trigger muss nach dem <dashed-ident> ein oder zwei <animation-action>-Schlüsselwörter enthalten. Sie bestimmen das Verhalten der Animation bei der Aktivierung und Deaktivierung des Triggers. Werden zwei <animation-action>-Werte angegeben, gilt der erste für die Aktivierung und der zweite für die Deaktivierung. Wird nur ein <animation-action>-Wert angegeben, gilt er für die Aktivierung; bei der Deaktivierung geschieht nichts.
Zum Beispiel:
.animated {
animation: rotate 3s infinite linear both;
animation-trigger: --my-trigger play-forwards play-backwards;
}
Wenn der Trigger aktiviert wird, wird die Animation mit play-forwards abgespielt. Wenn der Trigger deaktiviert wird, wird sie mit play-backwards abgespielt.
Es gibt acht <animation-action>-Werte, die jeweils ein anderes Animationsverhalten bewirken.
Die Kombination play-forwards play-backwards ist ein häufiges Muster: Ein Element wird beim Aktivieren seines Triggers „eingeblendet“, etwa wenn es in den sichtbaren Bereich gescrollt wird, und beim Deaktivieren wieder „ausgeblendet“, etwa wenn es aus dem sichtbaren Bereich gescrollt wird.
Die Aktion play-once wird im Allgemeinen allein oder als Teil von play-once pause verwendet. Wird play-once als Aktivierungsaktion festgelegt, wird die Animation nur einmal abgespielt, wenn das Element in den sichtbaren Bereich gescrollt wird. Durch pause als Deaktivierungsaktion wird die Animation angehalten, wenn der Trigger seinen aktiven Bereich verlässt. Wird der Trigger erneut aktiviert, läuft die Animation an der Stelle weiter, an der sie angehalten wurde.
Weitere Informationen und Beispiele zu den einzelnen Schlüsselwörtern finden Sie beim Datentyp <animation-action>.
Eine Animation durch mehrere Trigger auslösen
Wenn Sie Trigger auf mehreren Elementen definieren möchten, die alle dieselbe Animation auf einem Element auslösen, müssen Sie die Animation auf diesem animierten Element mehrfach angeben und jeder animation-Instanz einen anderen Trigger zuweisen.
Zum Beispiel:
.animated {
animation:
spinOnce 2s 1 ease-out,
spinOnce 2s 1 ease-out;
animation-trigger:
--t1 play-forwards play-backwards,
--t2 play-forwards play-backwards;
}
.trigger1 {
timeline-trigger: --t1 view();
}
.trigger2 {
timeline-trigger: --t2 view();
}
Ein funktionsfähiges Beispiel finden Sie unter Mehrere Trigger für dieselbe Animation.
Zurücksetzen durch die Kurzschreibweise animation
Die Eigenschaft animation-trigger ist eine Untereigenschaft der Kurzschreibweise animation, die von dieser nur zurückgesetzt wird. Das bedeutet, dass Triggernamen und Animationsaktionen nicht in der Kurzschreibweise animation angegeben werden können. Wenn Sie animation festlegen, wird animation-trigger jedoch auf seinen Anfangswert none zurückgesetzt. Legen Sie deshalb animation-trigger innerhalb einer Deklarationsliste immer nach der zugehörigen Eigenschaft animation fest, oder deklarieren Sie animation-trigger in einem Deklarationsblock mit Selektoren höherer specificity.
Mehrere animation-trigger-Werte
Mehrere animation-trigger-Werte funktionieren genauso wie mehrere Werte für die Kurzschreibweise animation und die anderen einzelnen Animationseigenschaften:
- Wenn mehrere
animation-name-Werte, aber nur einanimation-trigger-Wert festgelegt sind, gilt dieseranimation-triggerfür alle Animationen. - Wenn zwei oder mehr kommagetrennte
animation-trigger-Werte festgelegt sind, werden sie den Animationen der Reihe nach wiederholt zugewiesen, bis jede Animation einenanimation-trigger-Wert hat. Ein Beispiel finden Sie unter Mehrere scrollgesteuerte Animationen mit Triggern deklarieren.
Gegeben sei folgendes CSS:
.animated {
animation:
fade-in linear 1s forwards,
rotate infinite 5s both,
shrink ease-in 3s forwards,
colorchange steps(5) 5s forwards;
animation-trigger:
--t1 play pause,
--t2 forwards backwards;
}
.trigger1 {
timeline-trigger: --t1 view();
}
.trigger2 {
timeline-trigger: --t2 view();
}
Wenn für das animierte Element animation-trigger: --t1 play pause, --t2 forwards backwards festgelegt ist, löst --t1 die Animationen fade-in und shrink aus, während --t2 die Animationen rotate und colorchange auslöst.
Formale Definition
| Anfangswert | none |
|---|---|
| Anwendbar auf | alle Elemente |
| Vererbt | Nein |
| Berechneter Wert | wie angegeben |
| Animationstyp | Not animatable |
Formale Syntax
animation-trigger =
[ none | [ <dashed-ident> <animation-action>+ ]+ ]#
Beispiele
>Grundlegende Verwendung
Dieses Beispiel zeigt, wie Sie eine scrollgesteuerte Animation mit Trigger erstellen, die bei Aktivierung abgespielt und bei Deaktivierung angehalten wird.
HTML
Das Markup enthält zwei <div>-Elemente – eines für die Animation und eines zum Erstellen eines Triggers – sowie etwas Text, damit die Seite gescrollt werden kann. Der Text ist der Kürze halber ausgeblendet.
<div class="animated">I am animated</div>
...
<div class="trigger">I create the trigger</div>
...
CSS
Die Eigenschaft position des Elements .animated wird auf fixed gesetzt. Dadurch wird es nahe der oberen linken Ecke des Scrollports positioniert, sodass zu sehen ist, wie die Animation abgespielt und angehalten wird.
.animated {
position: fixed;
top: 25px;
left: 25px;
}
Als Nächstes definieren wir die @keyframes für die Animation rotate:
@keyframes rotate {
from {
rotate: 0deg;
}
to {
rotate: 360deg;
}
}
Mit der Kurzschreibweise animation wird die Animation rotate auf das Element .animated angewendet. Ohne zugehörigen Trigger würde die Animation beim Laden der Seite beginnen. Die Eigenschaft animation-trigger macht sie zu einer durch einen Trigger ausgelösten Animation. Der Wert verweist auf einen timeline-trigger-name namens --t und gibt zwei <animation-action>-Werte an – play und pause. Diese legen fest, dass die Animation bei Aktivierung abgespielt und bei Deaktivierung angehalten wird.
.animated {
animation: rotate 3s infinite linear both;
animation-trigger: --t play pause;
}
Wir legen für das Element .trigger den timeline-trigger-name --t fest. Da dieser Wert dem Bezeichner entspricht, auf den der Wert von animation-trigger im Deklarationsblock von .animated verweist, werden die beiden Elemente miteinander verknüpft. So entsteht der Trigger für das animierte Element. Außerdem geben wir für timeline-trigger-source den Wert view() an. Dadurch basiert der Timeline-Trigger auf einer View-Progress-Timeline; sowohl der aktive Bereich als auch der Aktivierungsbereich umfassen die gesamte cover-Timeline. Beides ließe sich auch zusammen als timeline-trigger: view() --t deklarieren.
.trigger {
timeline-trigger-name: --t;
timeline-trigger-source: view();
}
Ergebnis
Scrollen Sie den Inhalt nach oben und unten. Sobald ein Teil des Elements .trigger im Scrollport erscheint, wird die Animation abgespielt. Hat das Element den Scrollport an einer der beiden Kanten vollständig verlassen, wird die Animation angehalten.
Das animierte Element als Trigger verwenden
Dieses Beispiel zeigt, wie ein animiertes Element auch seinen eigenen Trigger erstellen kann.
HTML
Diesmal enthält das Markup nur ein <div>-Element sowie Text, durch den die Seite gescrollt werden kann. Das Markup für den Text ist der Kürze halber ausgeblendet.
<div>I create my own trigger</div>
CSS
Wir erstellen einen @keyframes-Block, der die Hintergrund- und Vordergrundfarben umkehrt:
@keyframes invert-colors {
from {
background: orange;
color: black;
}
to {
background: black;
color: orange;
}
}
Wir legen animation für das <div>-Element fest, sodass die Farben innerhalb von 600ms fließend umgekehrt werden. Außerdem legen wir einen animation-trigger-Wert fest, der auf den timeline-trigger-name --t verweist und zwei <animation-action>-Werte enthält: play-forwards und play-backwards. Sie bestimmen, dass die Animation bei Aktivierung vorwärts und bei Deaktivierung rückwärts abgespielt wird.
Zusätzlich legen wir für das <div> den Wert timeline-trigger: --t view() contain fest, sodass es den Trigger für seine eigene Animation erstellt. Die Kurzschreibweise timeline-trigger enthält Werte für drei einzelne Eigenschaften:
- Einen Wert für
timeline-trigger-name: einen<dashed-ident>-Bezeichner, auf den die Eigenschaftanimation-triggerverweist. - Einen Wert für
timeline-trigger-source:view()legt fest, dass der Timeline-Trigger auf einer View-Progress-Timeline basiert, die das Element innerhalb seines nächstgelegenen scrollenden Vorfahren verfolgt. - Einen Wert für
timeline-trigger-activation-range: Der<timeline-range-name>-Wertcontainbewirkt, dass der Trigger aktiviert wird, wenn sich das<div>vollständig im Scrollport befindet. Da wir für die Komponentetimeline-trigger-active-rangekeinen Wert festgelegt haben, entspricht der aktive Bereich dem Aktivierungsbereich. Der Trigger wird daher deaktiviert, sobald das Element beginnt, den Scrollport zu verlassen.
div {
animation: invert-colors 0.6s ease-in both;
animation-trigger: --t play-forwards play-backwards;
timeline-trigger: --t view() contain;
}
Ergebnis
Scrollen Sie den Inhalt nach oben. Sobald sich das <div> vollständig im Scrollport befindet, wird seine Animation abgespielt. Sobald ein Teil des Elements den Scrollport an einer der beiden Kanten verlässt, wird die Animation rückwärts abgespielt.
Mehrere Trigger für dieselbe Animation
Dieses Beispiel zeigt, wie mehrere Trigger zur Steuerung derselben Animation zugewiesen werden. Es ähnelt dem Beispiel zur grundlegenden Verwendung, verwendet aber mehrere Trigger für dieselbe Keyframe-Animation.
HTML
Wir verwenden drei <div>-Elemente als Trigger. Der Text ist der Kürze halber ausgeblendet.
<div class="animated">I am animated</div>
...
<div class="trigger1">I create a trigger</div>
...
<div class="trigger2">I create another trigger</div>
...
<div class="trigger3">I create yet another trigger</div>
...
CSS
Der Wert der Kurzschreibweise animation ist eine kommagetrennte Liste von Animationen, in der derselbe animation-name – rotate – dreimal verwendet wird. Der Wert von animation-trigger ist eine kommagetrennte Liste mit drei Animationstriggern, jeweils einem für jede Animationsinstanz.
.animated {
animation:
rotate 3s infinite linear both,
rotate 3s infinite linear forwards,
rotate 3s infinite linear forwards;
animation-trigger:
--t1 play-forwards play-backwards,
--t2 play-forwards play-backwards,
--t3 play-forwards play-backwards;
}
Wir definieren auf jedem <div>-Element, das als Trigger dient, einen Timeline-Trigger mit einem anderen Namen. Diese Namen entsprechen denen, auf die die Eigenschaft animation-trigger des Elements .animated verweist.
.trigger1 {
timeline-trigger: --t1 view();
}
.trigger2 {
timeline-trigger: --t2 view();
}
.trigger3 {
timeline-trigger: --t3 view();
}
Ergebnis
Scrollen Sie den Inhalt nach oben und unten. Beachten Sie, wie die Animation aktiviert und anschließend deaktiviert wird, wenn die einzelnen Trigger-Elemente in den sichtbaren Bereich hinein- und wieder herausgescrollt werden.
Spezifikationen
| Spezifikation |
|---|
| Animation Triggers> # propdef-animation-trigger> |
Browser-Kompatibilität
Siehe auch
- Datentyp
<animation-action> timeline-trigger-name,timeline-trigger-source,timeline-trigger-activation-rangeundtimeline-trigger-active-range- Kurzschreibweise
timeline-trigger trigger-scope- CSS-Animationen mit Scroll-Triggern verwenden
- Modul CSS animation triggers
- Modul CSS animations
- Modul CSS scroll-driven animations