Ik voer een animatie uit op enkele elementen die zijn ingesteld op opacity: 0;
in de CSS. De animatieklasse wordt toegepast op Click en verandert met behulp van keyframes de dekking van 0
in 1
(onder andere).
Helaas, wanneer de animatie voorbij is, gaan de elementen terug naar opacity: 0
(in zowel Firefox als Chrome). Mijn natuurlijke gedachte zou zijn dat geanimeerde elementen hun uiteindelijke staat behouden en hun oorspronkelijke eigenschappen opheffen. Is dit niet waar? En zo niet, hoe kan ik het element ertoe brengen dit te doen?
De code (versies met prefix niet inbegrepen):
@keyframes bubble {
0% { transform:scale(0.5); opacity:0.0; }
50% { transform:scale(1.2); opacity:0.5; }
100% { transform:scale(1.0); opacity:1.0; }
}
Antwoord 1, autoriteit 100%
Probeer animation-fill-mode: forwards;
toe te voegen. Bijvoorbeeld als volgt:
-webkit-animation: bubble 1.0s forwards; /* for less modern browsers */
animation: bubble 1.0s forwards;
Antwoord 2, autoriteit 9%
Als je meer animatie-attributen gebruikt, is de steno:
animation: bubble 2s linear 0.5s 1 normal forwards;
Dit geeft:
bubble
animatienaam2s
duurlinear
timing-functie0.5s
vertraging1
iteratie-telling (kan ‘infinite
‘ zijn)normal
richtingforwards
vulmodus (stel ‘achteruit’ in als u compatibiliteit wilt hebben om de eindpositie als de laatste staat te gebruiken [dit is om browsers te ondersteunen die animaties hebben uitgeschakeld]{en om te antwoorden alleen de titel, en niet uw specifieke geval})
Antwoord 3, autoriteit 4%
ALS U DE KORTE HANDVERSIE NIET GEBRUIKT:zorg ervoor dat de animation-fill-mode: forwards
NAde animatieverklaring is, anders zal niet werken…
animation-fill-mode: forwards;
animation-name: appear;
animation-duration: 1s;
animation-delay: 1s;
vs
animation-name: appear;
animation-duration: 1s;
animation-fill-mode: forwards;
animation-delay: 1s;
Antwoord 4
Gebruik
animatie-vulmodus: vooruit;
animation-fill-mode: forwards;
Het element behoudt de stijlwaarden die zijn ingesteld door het laatste hoofdframe (afhankelijk van de animatierichting en het aantal animatie-iteraties).
Opmerking: de @keyframes-regel wordt niet ondersteund in Internet Explorer 9 en eerdere versies.
Werkvoorbeeld
div {
width: 100px;
height: 100px;
background: red;
position :relative;
-webkit-animation: mymove 3ss forwards; /* Safari 4.0 - 8.0 */
animation: bubble 3s forwards;
/* animation-name: bubble;
animation-duration: 3s;
animation-fill-mode: forwards; */
}
/* Safari */
@-webkit-keyframes bubble {
0% { transform:scale(0.5); opacity:0.0; left:0}
50% { transform:scale(1.2); opacity:0.5; left:100px}
100% { transform:scale(1.0); opacity:1.0; left:200px}
}
/* Standard syntax */
@keyframes bubble {
0% { transform:scale(0.5); opacity:0.0; left:0}
50% { transform:scale(1.2); opacity:0.5; left:100px}
100% { transform:scale(1.0); opacity:1.0; left:200px}
}
<h1>The keyframes </h1>
<div></div>
Antwoord 5
Ik had een probleem met het gebruik van forwards
: in Chrome, zelfs nadat de animatie was afgelopen, was de renderer nog steeds bezig met het opzuigen van grafische bronnen, waardoor de applicatie minder snel reageerde.
Een aanpak die dit probleem niet veroorzaakt, is door een EventListener
te gebruiken.
CSS-animaties zenden gebeurtenissen uit, dus u kunt de animationend gebruiken gebeurtenis om in te grijpen wanneer de animatie eindigt.
CSS
.fade_in {
animation: fadeIn 2s;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
JavaScript
const element = document.getElementById("element-to-be-animated");
element.addEventListener("animationend", () => {
// Set your final state here. For example:
element.style["opacity"] = 1;
}, { once: true });
De optie once: true
vertelt de engine om de gebeurtenislistener te verwijderen nadat deze is uitgevoerd, waardoor je applicatie fris en schoon blijft.
Ik heb een JSFiddlegemaakt om te laten zien hoe het werkt.