####一:查询知识点
- obj.style.attr只能获取行内样式设置的属性值,obj.currentStyle和getComputedStyle(obj,false)[attr]可以获取内联样式表和外链样式表设置的属性值,其中obj.currentStyle是在IE下使用的方法
####二:说明
- 该框架只能设置opacity和以px为单位的属性值
####三:代码
function getStyle(obj,name){
if(obj.currentStyle){//IE下使用
return obj.currentStyle[name];
}else{
return getComputedStyle(obj,null)[name];
};
};
function motion(obj,json,func){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var stopSig = true;
for(var name in json){
//获取目前对象属性值
var cur = 0;
if(name == 'opacity'){
cur = Math.round(parseFloat(getStyle(obj,name))*100);
}else{
cur = parseFloat(getStyle(obj,name));
};
//获取要设置的属性值
var valTarget = json[name];
if(name == 'opacity'){
valTarget *= 100;
};
//设置定时器每次改变的属性值大小
var valSpeed = (valTarget - cur)/6;
valSpeed = valSpeed > 0 ? Math.ceil(valSpeed) : Math.floor(valSpeed);
//使用valSpeed设置新的属性值
if(name == 'opacity'){
//兼容IE
obj.style.filter = 'alpha(opacity:' + (cur + valSpeed) + ')';
obj.style.opacity = (cur + valSpeed)/100;
}else{
obj.style[name] = cur + valSpeed + 'px';
};
//当目前属性值不等于目标值时
if(cur != valTarget){
stopSig = false;
};
};
//stopSig==true表示所有属性值都达到了目标值,清楚这个定时器
if(stopSig){
clearInterval(obj.timer);
if(func){
func();
};
};
},50);
};
有好的建议或者有发现错误请在评论中指出,谢谢—noob