<pre name="code" class="javascript">此函数可以实现元素带有长度单位属性变化或者透明度变化的动画效果
function animate(obj, json, fn) {
clearInterval(obj.timer);
obj.timer = setInterval(function() {
var bStop = true; //假设所有运动都停止了
for(attr in json) {
var iCur = 0;
if(attr == 'opacity') {
iCur = parseInt(parseFloat(getStyle(obj, attr)) * 100);
} else {
iCur = parseInt(getStyle(obj, attr));
}
var iSpeed = (json[attr] - iCur)/8;
iSpeed = iSpeed>0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
if(iCur != json[attr]) {
bStop = false;
}
if(attr == 'opacity') {
obj.style.filter = 'alpha(opacity:'+ (iCur + iSpeed) +')';
obj.style.opacity = (iCur + iSpeed)/100;
} else {
obj.style[attr] = iCur + iSpeed + 'px';
}
}
if(bStop) {
clearInterval(obj.timer);
if(fn) {
fn();
}
}
},30);
}
function getStyle(obj, attr) {
if(obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj,false)[attr];
}
}