【发布时间】:2014-01-02 21:05:53
【问题描述】:
尝试在 javascript(没有 jQuery)中实现简单的缓动,但不幸的是,当单击按钮时似乎没有任何动画(见下文)。
我的目标是通过补间第一个项目的左边距属性来使隐藏的列表项目(最后一个项目)可见。我知道这不是 CSS 问题,因为手动修改样式会移动列表,但我不确定问题是什么。我的猜测是我如何调用 ease 函数,但更改参数仍然对我不起作用。
缓动部分如下,完整代码在这里:Fiddle
JS:
var start = document.getElementById('start'),
list = document.getElementById('my-list'),
imgs = list.getElementsByTagName('img'),
last_img = imgs[imgs.length -1 ];
ease = function(t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
},
shift_imgs = function(el) {
var orig_value = parseFloat( el.style.marginLeft ),
end_value = -37,
change = Math.abs( end_value - orig_value ),
duration = 1, // 1 second
time = 0;
for ( var i = 0; i < change; i++ ) {
setTimeout(function() {
el.style.marginLeft = ( parseFloat( el.style.marginLeft ) + 1 ) + 'px';
}, time);
time = ease(time, orig_value, change, duration);
}
};
start.onclick = function() {
shift_imgs(last_img);
}
【问题讨论】:
-
为什么不直接使用 CSS 过渡? unlimited bezier functions 触手可及;)
-
@NiettheDarkAbsol 是的,我很了解 CSS3,但这更像是个人练习 :)
-
很公平!我自己也经历过这个练习,所以我完全理解 :) 但主要问题是
margin-left:123无效。有效的 CSS 是margin-left:123px- 记得添加单位,即使在 JavaScript 中也是如此;)
标签: javascript html css easing