动画延迟负值,你知道?用处大着嘞!
大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,邀你进群,一起学习交流前端,成为更优秀的工程师~关注公众号:半夏话前端,了解更多前端知识!点我探索新世界!
前言
在上一篇文章 《纯CSS 快闪文字效》 中,主要使用延迟动画,实现文字的逐渐消失的效果,不过我在实现上面的效果之后,发现了一个问题,如果我想重复的快闪,此时是不支持的。此时前面的文字可能都到N个循环了,但是后面的文字还是N-*个循环。
怎么解决呢?既然正着的延迟执行实现不了,那么负值可以嘛?
在CSS中animation-delay可以设置为负值,大家熟知的是正值是延迟执行,这里负值的是立即执行。而且根据动画执行时间和动画延迟负值。动画会立即执行其中的某一帧。
负值延迟
animation-delay: -4s;
负值延迟倒是会出现什么效果?我能明确的就是动画立即执行。不过他到底选择的是哪一帧?
我们通过一个小例子来明确!
这里我们设置文本颜色随着时间改变,这里将整个动画持续时间设置为10秒,动画分为5段。每一段是一个颜色。
这里我们可以设置animation-delay的值为-10到-1 ,然后看一下不同值下的开始颜色。
p{
animation: colorChange 10s infinite ease-in-out;
}
@keyframes colorChange{
0%{
color: rgb(43, 255, 0);
}
20%{
color: orange;
}
40%{
color: rgb(195, 0, 255);
}
60%{
color: rgb(255, 0, 0);
}
80%{
color:rgb(0, 255, 221);
}
100%{
color: black;
}
}
首先是-10
这里我们动画持续时间是10秒,动画是20%的等差。我们又可以将动画分成10%的等差。
下面我们来看一下动画演示。
当我们点击动画前面的checkbox的时候,字体的颜色变成color: rgb(43, 255, 0);,也就是绿色。立即变成绿色,说明动画立即开始了,同时动画处于0-20%之间的某一个位置。对于这个位置大家可能有点想法了,但是还不确定!好,再来一个例子。
接下来是-7秒
为啥不是-9 -8 ,连续的可能就看不太出来了。、
当启用动画时,字体颜色突然变成 color:rgb(0, 255, 221);,也就是80%-100%之间的的颜色。
其实到这里我已经偷的添加。-10s时0的颜色,并不是100%的黑色。-7秒时80%的颜色,并不是70%的红色。
结论:动画延迟负值,表示从负值绝对值的下一秒开始执行。也就是-10,执行0秒。-7 执行8秒。,当然这只是我的记忆方法。可能表述是有问题的。
快闪文字的bug解决
在文章开始,已经聊过了现状,我直接上代码了。
在快闪文字那篇文章中,我们设置的动画持续时间是1s。这里我们设置的是6秒,同时动画的延迟也是从-1 的等差。
animation: text 6s infinite ease-in-out;
}
.text:nth-child(1) {
animation-delay: -6s;
}
.text:nth-child(2) {
animation-delay: -5s;
}
.text:nth-child(3) {
animation-delay: -4s;
}
.text:nth-child(4) {
animation-delay: -3s;
}
.text:nth-child(5) {
animation-delay: -2s;
}
.text:nth-child(6) {
animation-delay: -s;
}
这个时候我们的动画也需要改变,这里我们设置了等分的点,0和100%为不透明。17%(100/6)为不透明
@-webkit-keyframes text {
0%,
100% {
filter: blur(0px);
opacity: 1;
}
17%,
{
filter: blur(1em);
opacity: 0;
}
}
这里为啥是17%,因为动画是6秒,设置17%是大概一秒的位置。
第一个文字是-6秒也就是,也就是跳过6秒,从0开始,此时文字不透明。一秒后是不透明,持续5秒的透明。
第二个文字是-5秒,也就是从第6秒开始,此时文字是透明,等1秒后变成不透明,持续1秒不透明,然后下面接着透明!
请注意,动画延迟负值,动画会立即执行!所以第一个文字的动画和第二个文字的动画是一起执行的。第一个文字不透明到透明是一秒,第二个文字的透明到不透明也是一秒。所以第一个文字消失,第二个文字出现。
- 点赞
- 收藏
- 关注作者
评论(0)