【发布时间】:2013-04-08 00:52:10
【问题描述】:
我想将一个简单的 CSS3 动画转换为纯 JavaScript(不是在 jQuery 中,因为我认为为这么简单的事情加载整个库有点过头了)。
这是关于来自http://daneden.me/animate/ 的动画bounceInUp。示例演示:http://jsfiddle.net/ELDf7/
@keyframes bounceInUp {
0% {
opacity: 0;
transform: translateY(2000px);
}
60% {
opacity: 1;
transform: translateY(-30px);
}
80% {
transform: translateY(10px);
}
100% {
transform: translateY(0);
}
}
http://javascript.info/tutorial/animation 有一个关于如何使用 JavaScript 制作动画的教程。但是我数学不是很好,所以我在 PhotoShop 中做了一个图表来展示动画应该如何在 JavaScript 中运行(大约):
(其他'deltas'的绘图仪可以在here找到)
是否可以在纯 JavaScript 中从该图表中创建一个数学公式,返回动画的“增量”?
我用bounce function 尝试了一些东西,但并没有真正奏效。 (http://jsfiddle.net/ELDf7/2/)
编辑: 我设法制作了一个很好的数学公式:
-Math.cos(2*Math.PI*progress) + Math.pow(progress, 1) * ((1.5 + 1) * progress - 1.5);
但是现在我遇到了另一个问题,动画从显示一半的图像开始,而不是隐藏整个图像,就像 CSS3 动画一样。
有关 JavaScript 动画的现场演示,请参见此处:http://jsfiddle.net/ELDf7/14/
有谁知道我可以如何更改它以使图像最初完全隐藏?也许可以创建一个包含图像高度的变量,然后 JavaScript 进行计算,以便动画在图像出现一半之前不会开始。
【问题讨论】:
-
jQuery 将为您提供事件和计时器,以及一个动画方法,这大大简化了这一切。否则,您将不得不自己设置窗口超时,并进行这些计算。坦率地说,当 jQueryUI 有非常适合的东西时,自己实现这个可能很愚蠢。 docs.jquery.com/UI/Effects/Bounce如果你真的想自己动手,研究它的来源可能会有所帮助。
-
这不是CSS3 transitions;这是CSS3 animations。转换使用
transition速记属性。动画使用animation速记属性和@keyframes。 -
对于您的最后一个问题,只需在
bounce中插入progress += 1;即可。 see
标签: javascript css animation css-animations