甫里
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动画效果
113925 学习 · 1443 问题
相似问题