我可以使用关键帧动画分别为多个css变换属性设置动画

Dmi*_*try 12 css animation transform css-animations

我想使用这样的关键帧动画分别为两个(或更多)css变换属性设置动画:

@keyframes translatex {
    100% {
        transform: translateX(100px);
    }
}
@keyframes rotatez {
    100% {
        transform: rotateZ(80deg);
    }
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<div class="rect"></div>
Run Code Online (Sandbox Code Playgroud)

translatex动画应以0秒延迟开始,持续5秒.rotatez动画应以1秒延迟开始并持续3秒.因此,正确的元素开始移动,然后在1秒钟后开始旋转,然后在3秒后它停止旋转,再经过1秒后,它就完成了它的运动.

应用动画:

.rect {
    animation-name: translatex, rotatez;
    animation-duration: 5s, 3s;
    animation-timing-function: ease, ease-in-out;
    animation-delay: 0s, 1s;
    animation-direction: forward, forward;
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是只应用了rotatez动画.我的问题是:有没有办法用css(关键帧动画,过渡)实现这样的动画,或者我需要JS和requestAnimationFrame?

编辑:: 我的FIDDLE

leM*_*ela 15

对的,这是可能的.而不是调用2个动画名称,只创建一个动画,其中包含两个动作

@keyframes translateXandZ {
    100% {
        transform: translateX(100px) rotateZ(80deg);
    }
}
Run Code Online (Sandbox Code Playgroud)

看一下关于css动画的谷歌演示:google css animation,slide 12

如果你给我们一个小提琴,我可以在你的例子上更新我的答案.

编辑:这是一个解决方法,即使它是一个粗略的版本:$:小提琴

@-webkit-keyframes translateXandZ {
    0% {-webkit-transform: translateX(0px) rotateZ(0deg);}
    2% {-webkit-transform: translateX(1px) rotateZ(0deg);}
    5% {-webkit-transform: translateX(3px) rotateZ(0deg);}
    20% {-webkit-transform: translateX(20px) rotateZ(0deg);}
    80% {-webkit-transform: translateX(80px) rotateZ(80deg);}
    95% {-webkit-transform: translateX(97px) rotateZ(80deg);}
    98% {-webkit-transform: translateX(99px) rotateZ(80deg);}
    100% {-webkit-transform: translateX(100px) rotateZ(80deg);}
}
Run Code Online (Sandbox Code Playgroud)

现在你的动画是线性的,但为了让它像轻松进出,我只是玩动画的开头和结尾.仍然不完美,但这是我看到你如何得到你想要的唯一方式!

  • 感谢您的有用链接.问题是,在你的情况下,两个属性一起动画,我只能使用一个计时功能和延迟.我需要的是单独的变换属性动画. (3认同)