animation-fill-mode属性的理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了animation-fill-mode属性的理解相关的知识,希望对你有一定的参考价值。
参考技术A在动画等待阶段,none、forwards保持的还是元素最初始的状态,而backwards和both保留的是动画第一帧的状态。
从上图可看出,动画执行过程中的状态都是一样的。所以,区别在于动画等待阶段和动画结束后。
动画结束后,none、backwards回到了最初始状态,forwards、both保留的是动画最后一帧的状态。
所以,总结一下animation-fill-mode用法:
animation-fill-mode:控制动画执行前和执行后的状态。
一个动画过程可分为动画等待、动画执行、动画结束,默认情况下,只有动画执行阶段才会触发@keyframes中声明的动画。
- animation-fill-mode:none ;
-默认值。在设置了动画延迟情况下(设置延迟的目的是为了区分在动画等待阶段的差异),在动画等待阶段,保留的是元素最初始的状态,动画结束后,仍然回到元素最初始的状态。
- animation-fill-mode: forwards;
- 在设置了动画延迟情况下,动画等待阶段,保留的是元素最初始的状态,动画结束后,保留最后一帧的状态
- animation-fill-mode: backwards;
- 在设置了动画延迟情况下,在动画等待阶段,保留的是动画第一帧(from或者0%)的状态或者最后一帧(当使用了 animation-direction: reverse;)的状态。动画结束后,回到的是元素最初始状态。
- animation-fill-mode: both;
- 在设置了动画延迟情况下,在动画等待阶段,保留的是动画第一帧(from或者0%)的状态或者最后一帧(当使用了 animation-direction: reverse;)的状态。动画结束后,保留最后一帧的状态。可以看出,是forwards和backwards的结合。
animation-fill-mode使用案例:
CSS3针对不同属性的不同自定义缓动
【中文标题】CSS3针对不同属性的不同自定义缓动【英文标题】:CSS3 different custom easing for different properties 【发布时间】:2015-01-18 07:29:49 【问题描述】:我已经为某个 div 设置了动画。
.Animation
-webkit-animation-fill-mode: both; /*and also -moz, -ms etc. */
animation-fill-mode: both;
-webkit-animation-delay: 1s;
animation-delay: 1s;
-webkit-animation-duration: 2s;
animation-duration: 2s;
@-webkit-keyframes scaleAnimation /*and also -moz, -ms etc. */
0%
opacity: 0;
-webkit-transform: scale(2);
100%
opacity: 1;
-webkit-transform: scale(1);
.ScaleAnimation
-webkit-animation-name: scaleAnimation; /*and also -moz, -ms etc. */
animation-name: scaleAnimation;
但我想要一个 不同 自定义缓动(三次贝塞尔曲线)用于不透明度和另一个自定义缓动用于变换。我该如何让它发挥作用。
以下操作无效:
transition: opacity 1s ease-in-out;
transition: scale 1s ease-in-out;
因此,它绝对不适用于自定义缓动,cubic-bezier(0.555, -0.130, 0.270, 1.075);例如。
有什么想法吗? :)
【问题讨论】:
animation-timing-function: cubic-bezier(...
如果你用逗号分隔转换,它应该可以工作,例如- transition: opacity 1s ease-in-out, scale 1s cubic-bezier(0.555, -0.130, 0.270, 1.075);
CSS transition shorthand with multiple properties? 的可能重复项
@Paulie_D 不幸的是,这在此关键帧设置中不起作用。动画不会开始。
【参考方案1】:
对于转换,您可以通过逗号分隔来指定多个转换。
transition: <duration> <property> <delay> <timing-function>, ....
transition: 1s opacity 1s ease-in-out, 1s scale 1s linear;
如果你想走动画/关键帧路线,那么你可以创建两个动画关键帧。一个用于比例,另一个用于不透明度。然后在元素的动画设置中用逗号分隔它们。
缓动的属性是animation-timing-function
。对于基于 webkit 的浏览器(从您的问题看来,您不介意供应商前缀),它变为 -webkit-animation-timing-function
。
你可以像这样设置 sn-p:
div
width: 120px; height: 120px;
background-color: red;
display: inline-block;
div.d1
-webkit-animation-fill-mode: both;
-webkit-animation-delay: 2s, 2s;
-webkit-animation-duration: 2s, 2s;
-webkit-animation-name: scaleAnimation, opacityAnimation;
-webkit-animation-timing-function:
cubic-bezier(0.1, 0.7, 1.0, 0.1), ease-in;
div.d2
-webkit-animation-fill-mode: both;
-webkit-animation-delay: 2s, 2s;
-webkit-animation-duration: 2s, 2s;
-webkit-animation-name: scaleAnimation, opacityAnimation;
-webkit-animation-timing-function: linear linear;
@-webkit-keyframes scaleAnimation
0%
-webkit-transform: scale(2);
100%
-webkit-transform: scale(1);
@-webkit-keyframes opacityAnimation
0%
opacity: 0;
100%
opacity: 1;
<div class="d1">D1</div>
<div class="d2">D2</div>
小提琴:http://jsfiddle.net/abhitalks/3y7pcd1t/1/
.
【讨论】:
嗨@abhitalks 感谢您的回答!在您的示例中,它是两个不同的 div。在我的一个 div 中,它具有不同的比例和不透明度缓动。您是否建议仅将一个 div 包裹在另一个 div 周围?然后将一个动画应用于 div 并将另一个动画应用于包装器?还是有更好的解决方法?谢谢。 :) @user2987394:有两个div
只是为了向您展示正在应用不同的缓动。拥有两个div
s 很容易比较,不是吗? :) 只需从小提琴中删除第二个 div
并根据您的要求进行调整。
谢谢!是的,对不起,对您的两个 div 示例的错误解释。但是很好,这很完美。 :)以上是关于animation-fill-mode属性的理解的主要内容,如果未能解决你的问题,请参考以下文章
animation几个比较好玩的属性(alternate,及animation-fill-mode)
animation几个比較好玩的属性(alternate,及animation-fill-mode)