为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这段代码有Bug

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

正在回答

2 回答

首先,else要放在for循环外面,否则,一旦某一个attr达到目标值,即icur==json[attr]成立,就完成了else的判断.会运行else的代码.

其次,设立标杆的目的是为了方便取值,为else里面的代码进行成立与否的判断!!在for循环里面,程序会进行分次判断,有几个attr就会判断几次,只要有一个false,返回值就是false,如果不设立标杆,会出现某次是true,某次是false的结果,无法进行后面的else判断.

只要有一个attr达到目标值,icur==json[attr]的等式就会成立(就是说这个等式无法作为else执行判断的依据),也就是else的代码就会执行,计时器就会清除.

0 回复 有任何疑惑可以回复我~
#1

甫里 提问者

非常感谢!
2016-04-20 回复 有任何疑惑可以回复我~

没问题呀

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么这段代码有Bug

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信