繁体   English   中英

动画结束后动画填充模式和不透明度不保持最后的样式

[英]Animation fill mode and opacity are not keeping the last style after animation ends

我正在尝试使用设置为forwardsanimation-fill-mode将动画结束时的opacity设置为 1(它应该是最后一个关键帧),但由于某种原因我错过了将不透明度设置回动画结束时为 0。

这是我正在制作动画的元素片段:

<div class="section active">
   <span>Il</span>
   <span>massaggio</span>
   <span>è</span>
   <span>l'unica</span>
   <span>forma</span>
   <span>di</span>
   <span>piacere</span>
   <span>fisico</span>
   <span>a</span>
   <span>cui</span>
   <span>la</span>
   <span>natura</span>
   <span>ha</span>
   <span>dimenticato</span>
   <div id="arrow-container">
     <img src="images/social-35-white.svg" id="arrow-down" alt="" class="image-2">
   </div>
 </div>

虽然这里是带有动画的 css:

span {
    color: transparent;
    animation: blur 10s ease-out;
    -webkit-animation: blur 10s ease-out;
    animation-fill-mode: forwards;
    -webkit-animation-fill-mode: forwards;
}

span:nth-child(1) {
    animation-delay: 0.1s;
    -webkit-animation-delay: 0.1s;
}
span:nth-child(2) {
    animation-delay: 0.2s;
    -webkit-animation-delay: 0.2s;
}
span:nth-child(3) {
    animation-delay: 0.3s;
    -webkit-animation-delay: 0.3s;
}
span:nth-child(4) {
    animation-delay: 0.4s;
    -webkit-animation-delay: 0.4s;
}
span:nth-child(5) {
    animation-delay: 0.5s;
    -webkit-animation-delay: 0.5s;
}
span:nth-child(6) {
    animation-delay: 0.6s;
    -webkit-animation-delay: 0.6s;
}
span:nth-child(7) {
    animation-delay: 0.7s;
    -webkit-animation-delay: 0.7s;
}
span:nth-child(8) {
    animation-delay: 0.8s;
    -webkit-animation-delay: 0.8s;
}
span:nth-child(9) {
    animation-delay: 0.9s;
    -webkit-animation-delay: 0.9s;
}
span:nth-child(10) {
    animation-delay: 1.0s;
    -webkit-animation-delay: 1.0s;
}
span:nth-child(11) {
    animation-delay: 1.1s;
    -webkit-animation-delay: 1.1s;
}
span:nth-child(12) {
    animation-delay: 1.2s;
    -webkit-animation-delay: 1.2s;
}
span:nth-child(13) {
    animation-delay: 1.3s;
    -webkit-animation-delay: 1.3s;
}
span:nth-child(14) {
    animation-delay: 1.4s;
    -webkit-animation-delay: 1.4s;
}


@keyframes blur {
    0%      {text-shadow:  0 0 100px #111; opacity:0;}
    5%      {text-shadow:  0 0 90px #111;}
    15%     {opacity: 1;}
    20%     {text-shadow:  0 0 0px #111;}
    80%     {text-shadow:  0 0 0px #111;}
    100%.   {opacity: 1;}
}

@-webkit-keyframes blur {
    0%      {text-shadow:  0 0 100px #111; opacity:0;}
    5%      {text-shadow:  0 0 90px #111;}
    15%     {opacity: 1;}
    20%     {text-shadow:  0 0 0px #111;}
    80%     {text-shadow:  0 0 0px #111;}
    100%    {opacity: 1;}
}

为什么最后不保持不透明度?

你的最后一个关键帧是100% {opacity: 1;}所以这是保留的样式......但这不是使文本可见的样式!

文本有color:transparent所以不透明度没有任何影响。 实际上使文本可见的样式是text-shadow: 0 0 0px #111; ,因此您需要将其包含在最后一个关键帧中:

100%   {opacity: 1; text-shadow:  0 0 0px #111; }

注意:我一直保持opacity ,以防此处未包含其他元素,但对于此处的代码,它实际上并没有做任何事情:)

工作示例:
你可以在下面看到这个工作,仅供参考,我已经运行了 2 秒,所以可以更快地看到它的工作:)

 span { color: transparent; animation: blur 2s ease-out; -webkit-animation: blur 2s ease-out; animation-fill-mode: forwards; -webkit-animation-fill-mode: forwards; } span:nth-child(1) { animation-delay: 0.1s; -webkit-animation-delay: 0.1s; } span:nth-child(2) { animation-delay: 0.2s; -webkit-animation-delay: 0.2s; } span:nth-child(3) { animation-delay: 0.3s; -webkit-animation-delay: 0.3s; } span:nth-child(4) { animation-delay: 0.4s; -webkit-animation-delay: 0.4s; } span:nth-child(5) { animation-delay: 0.5s; -webkit-animation-delay: 0.5s; } span:nth-child(6) { animation-delay: 0.6s; -webkit-animation-delay: 0.6s; } span:nth-child(7) { animation-delay: 0.7s; -webkit-animation-delay: 0.7s; } span:nth-child(8) { animation-delay: 0.8s; -webkit-animation-delay: 0.8s; } span:nth-child(9) { animation-delay: 0.9s; -webkit-animation-delay: 0.9s; } span:nth-child(10) { animation-delay: 1.0s; -webkit-animation-delay: 1.0s; } span:nth-child(11) { animation-delay: 1.1s; -webkit-animation-delay: 1.1s; } span:nth-child(12) { animation-delay: 1.2s; -webkit-animation-delay: 1.2s; } span:nth-child(13) { animation-delay: 1.3s; -webkit-animation-delay: 1.3s; } span:nth-child(14) { animation-delay: 1.4s; -webkit-animation-delay: 1.4s; } @keyframes blur { 0% {text-shadow: 0 0 100px #111; opacity:0;} 5% {text-shadow: 0 0 90px #111;} 15% {opacity: 1;} 20% {text-shadow: 0 0 0px #111;} 80% {text-shadow: 0 0 0px #111;} 100% {opacity: 1; text-shadow: 0 0 0px #111; } } @-webkit-keyframes blur { 0% {text-shadow: 0 0 100px #111; opacity:0;} 5% {text-shadow: 0 0 90px #111;} 15% {opacity: 1;} 20% {text-shadow: 0 0 0px #111;} 80% {text-shadow: 0 0 0px #111;} 100% {opacity: 1; text-shadow: 0 0 0px #111; } }
 <div class="section active"> <span>Il</span> <span>massaggio</span> <span>è</span> <span>l'unica</span> <span>forma</span> <span>di</span> <span>piacere</span> <span>fisico</span> <span>a</span> <span>cui</span> <span>la</span> <span>natura</span> <span>ha</span> <span>dimenticato</span> <div id="arrow-container"> <img src="images/social-35-white.svg" id="arrow-down" alt="" class="image-2"> </div> </div>

另外仅供参考,您还有一个额外的. 在线: 100%. {opacity: 1;} 100%. {opacity: 1;}

正如你所说,使用animation-fill-mode: forwards; 意味着元素将保留执行期间遇到的最后一个关键帧设置的计算值,这是任何其他用户的参考: 动画填充模式的 MDN 文档

这应该工作

 span { animation: blur 5s ease-out; animation-fill-mode: forwards; } span:nth-child(1) { opacity: 0; animation-delay: 0.1s; -webkit-animation-delay: 0.1s; } span:nth-child(2) { opacity: 0; animation-delay: 0.2s; -webkit-animation-delay: 0.2s; } span:nth-child(3) { opacity: 0; animation-delay: 0.3s; -webkit-animation-delay: 0.3s; } span:nth-child(4) { opacity: 0; animation-delay: 0.4s; -webkit-animation-delay: 0.4s; } span:nth-child(5) { opacity: 0; animation-delay: 0.5s; -webkit-animation-delay: 0.5s; } span:nth-child(6) { opacity: 0; animation-delay: 0.6s; -webkit-animation-delay: 0.6s; } span:nth-child(7) { opacity: 0; animation-delay: 0.7s; -webkit-animation-delay: 0.7s; } span:nth-child(8) { opacity: 0; animation-delay: 0.8s; -webkit-animation-delay: 0.8s; } span:nth-child(9) { opacity: 0; animation-delay: 0.9s; -webkit-animation-delay: 0.9s; } span:nth-child(10) { opacity: 0; animation-delay: 1.0s; -webkit-animation-delay: 1.0s; } span:nth-child(11) { opacity: 0; animation-delay: 1.1s; -webkit-animation-delay: 1.1s; } span:nth-child(12) { opacity: 0; animation-delay: 1.2s; -webkit-animation-delay: 1.2s; } span:nth-child(13) { opacity: 0; animation-delay: 1.3s; -webkit-animation-delay: 1.3s; } span:nth-child(14) { opacity: 0; animation-delay: 1.4s; -webkit-animation-delay: 1.4s; } @keyframes blur { 0% { color: transparent; text-shadow: 0 0 100px #111; } 50% { color: transparent; text-shadow: 0 0 90px } 100% { opacity: 1; color: transparent; text-shadow: 0 0 0px #111; } }
 <div class="section active"> <span>Il</span> <span>massaggio</span> <span>è</span> <span>l'unica</span> <span>forma</span> <span>di</span> <span>piacere</span> <span>fisico</span> <span>a</span> <span>cui</span> <span>la</span> <span>natura</span> <span>ha</span> <span>dimenticato</span> <div id="arrow-container"> <img src="images/social-35-white.svg" id="arrow-down" alt="" class="image-2"> </div> </div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM