我有一个控件,我想在关键帧动画之后在两个位置之间转换。有没有办法使用相同的关键帧,但相反?另外,有没有办法停止动画,中途将其反转到开头?
这就是我现在所拥有的(我想要结合两个关键帧:
@-webkit-keyframes explode {
0% {
-webkit-transform: scale(1.0) rotate(0deg) translate(0px, 0px);
}
33% {
-webkit-transform: scale(2.0) translate(100px, -150px);
}
67% {
-webkit-transform: scale(2.0) translate(200px, -250px);
}
100% {
-webkit-transform: scale(1.0) translate(-15px, -15px);
}
}
@-webkit-keyframes explodeBack {
0% {
-webkit-transform: scale(1.0) translate(-15px, -15px);
}
67% {
-webkit-transform: scale(2.0) translate(100px, -150px);
}
100% {
-webkit-transform: scale(1.0) rotate(0deg) translate(0px, 0px);
}
}
.leftArrowAnimateForward{
-webkit-animation-name: explode;
-webkit-animation-duration: 3s;
-webkit-animation-timing-function: linear;
-webkit-animation-direction:normal; /* Safari and Chrome */
-webkit-transform: scale(1.0) translate(-15px, -15px);
}
.leftArrowAnimateBackward{
-webkit-animation-name: explodeBack;
-webkit-animation-duration: 3s;
-webkit-animation-timing-function: linear;
-webkit-animation-direction:alternate;
-webkit-transform: scale(1.0) translate(0px, 0px);
}
答案 0 :(得分:0)
如果没有直观地看到你到目前为止所做的事情,很难看到你想要做什么,但结帐动画填充模式。
这将允许您的动画在设置为转发时停在最后一个关键帧上,此时我相信关键帧在完成时会回到0。
玩游戏,如果您成功,请告诉我们。
答案 1 :(得分:0)
如果你将animation-iteration-count:2与动画方向:alternate结合,动画延迟与动画的长度相结合,你可以做你想要做的第一件事,你会得到一个动画只能反向播放一次。 (它基本上会跳到反向动画并开始在那里播放。)
除非你定义第二组关键帧并使用JS(或悬停或其他)在类之间切换,否则你不能用纯CSS动画做第二件事
答案 2 :(得分:0)
我遇到了同样的问题,并使用SCSS生成了两个版本的关键帧:normal
和reverse.
https://github.com/lichunbin814/scss-utils#with-reverse-version
/* mixin */
@mixin keyframe-reverse( $name, $value) {
@keyframes #{$name}-rev {
@each $position,
$change in $value {
#{ 100 -$position}% {
@each $prop,
$val in $change {
#{$prop}: #{$val};
}
}
}
}
}
@mixin keyframe-normal( $name, $value) {
@keyframes #{$name} {
@each $position,
$change in $value {
#{$position}% {
@each $prop,
$val in $change {
#{$prop}: #{$val};
}
}
}
}
}
@mixin keyframe-gen( $name, $value, $genReverse) {
@include keyframe-normal( $name: $name, $value: $value);
@if ($genReverse) {
@include keyframe-reverse( $name: $name, $value: $value)
}
}
/* use */
@include keyframe-gen(
$name : "fadeIn" ,
$value : (
0: (
transform: scale(1),
opacity: 1
),
100: (
transform: scale(0),
opacity: 0
),
) ,
$genReverse : true
);
.menu {
animation-name: fadeIn-rev;
&.active {
animation-name: fadeIn;
}
}
// output css
/*
@keyframes fadeIn {
0% {
transform: scale(1);
opacity: 1;
}
100% {
transform: scale(0);
opacity: 0;
}
}
@keyframes fadeIn-rev {
100% {
transform: scale(1);
opacity: 1;
}
0% {
transform: scale(0);
opacity: 0;
}
}
*/