css - 如何使用关键帧动画分别为多个 ​​CSS 转换属性设置动画

标签 css animation transform css-animations

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

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

HTML:

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

translatex 动画应该以 0 秒延迟开始并持续 5 秒。 rotatez 动画应该以 1 秒的延迟开始并持续 3 秒。 .rect 元素开始移动,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;
}

问题是只应用了 rotatez 动画。

是否有仅使用 CSS 实现动画的方法,例如关键帧动画或过渡,还是我需要 JavaScript 和 requestAnimationFrame

最佳答案

是的,这是可能的。不要调用两个动画名称,而是只创建一个包含两个 Action 的动画:

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

查看 Google 的“Animate your 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);}
}

您的动画是线性的,但为了使其缓入缓出,我播放了动画的开始和结束。它仍然不完美,但这是我看到您如何获得想要的东西的唯一方法。

关于css - 如何使用关键帧动画分别为多个 ​​CSS 转换属性设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579730/

相关文章:

c# Array.ForEach 替换元素的替代方法

javascript - 需要让jquery将css添加到通过ajax添加的表中

python - 如何增加Google Colab单元输出宽度?

html - 如何在 Qt 中用单个表格填充 QTextBrowser?

html - css 黑色文本包含彩色像素

jQuery fadeOut/fadeIn 未按预期工作?

jquery - 在滚动条上显示 CSS 动画

Java - 保持相对于图像旋转的缩放

javascript - jQuery 切换动画(也带有图像)

javascript - 如何获取具有 CSS3 转换的元素的 MouseEvent 坐标?