17

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

@keyframes translatex {
    100% {
        transform: translateX(100px);
    }
}
@keyframes rotatez {
    100% {
        transform: rotateZ(80deg);
    }
}

HTML:

<div class="rect"></div>

动画应以translatex0 秒延迟开始并持续 5 秒。动画应以rotatez1 秒延迟开始并持续 3 秒。元素开始移动,.rect1 秒后开始旋转,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;
}

问题是只rotatez应用了动画。

有没有办法只使用 CSS 来实现动画,例如关键帧动画或过渡,还是我需要 JavaScript 和requestAnimationFrame

4

1 回答 1

18

是的,有可能。与其调用两个动画名称,不如只创建一个包含两个动作的动画:

@keyframes translateXandZ {
    100% {
        transform: translateX(100px) rotateZ(80deg);
    }
}

查看 Google 的“动画您的 HTML5 ”演示文稿。

这是一个解决方法,即使它有点粗略:

@-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);}
}

您的动画是线性的,但为了使其轻松进出,我播放了动画的开头和结尾。它仍然不完美,但这是我看到你如何得到你想要的东西的唯一方法。

于 2012-11-27T08:30:12.680 回答