甫里
2016-04-18 16:45
function MoveModelFn(obj,json,fn){
//var flag=true;
clearInterval(obj.timer);
obj.timer=setInterval(function(){
for(var attr in json){
// 判断属性
var icur=0;
if (attr=='opacity') {
icur =Math.round(parseFloat(getStyle(obj,attr))*100);
}else{
icur=parseInt(getStyle(obj,attr));
}
//设置速度
var speed=(json[attr]-icur)/10;
var speed=speed>0?Math.ceil(speed):Math.floor(speed);
// 判断停止
if(icur!=json[attr]){
//flag=false;
if (attr=='opacity') {
obj.style.filter='alpha(opacity:'+(icur+speed)+')';//icur原始值+变化值speed
obj.style.opacity=(icur+speed)/100;
}else{
obj.style[attr]=icur+speed+"px";
}
}else {
clearInterval(obj.timer);
// 回调函数
if (fn) {
fn();
}
}
}
},30)如果不设立标杆。用if()else 有有bug
首先,else要放在for循环外面,否则,一旦某一个attr达到目标值,即icur==json[attr]成立,就完成了else的判断.会运行else的代码.
其次,设立标杆的目的是为了方便取值,为else里面的代码进行成立与否的判断!!在for循环里面,程序会进行分次判断,有几个attr就会判断几次,只要有一个false,返回值就是false,如果不设立标杆,会出现某次是true,某次是false的结果,无法进行后面的else判断.
即只要有一个attr达到目标值,icur==json[attr]的等式就会成立(就是说这个等式无法作为else执行判断的依据),也就是else的代码就会执行,计时器就会清除.
没问题呀
JS动画效果
113910 学习 · 1502 问题
相似问题