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

难道大家都觉得flag是放在计时器里才对??我的天

flag 放在计时器里跟没定义一个卵样,会出现bug,有些同志没有经过完全的调试就以为找出了一个bug;其实不然,运行的时候打开F12看看高宽就知道了,

正在回答

6 回答

flag是要放到计时器里的,同时if(flag)要放到for in循环的后面而不是里面,这样宽高就都对了

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

我的也有问题,加了if(flag)后链式运动执行不了了,因为链式运动一次只改变一个属性,然后达到后定时器就清空了,后面的就不执行了

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

楼主是没把if (flag)放在计时器外?

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

我的运行的很正常  也么有什么数据误差,,,


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

在flag为false时定时器会一直执行,每次执行时都会重置为true,直到所有的都达到目标值,就不会再为false了,然会就能执行下一个运动

1 回复 有任何疑惑可以回复我~
//同步运动函数
function move(obj, json, fn) {
	//清除定时器,避免出现多个定时器	
	clearInterval(obj.timer);

	//设定定时器
	obj.timer = setInterval(function () {
		//声明标杆变量
		var flag = true;
		//遍历同步运动属性
		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)/100;
			speed = speed>0?Math.ceil(speed):Math.floor(speed);

			// 判断是否所有值都达到了目标值,判定暂停定时器的指标
			if (icur != json[attr]) {
				flag = false;
			}
			if (attr == 'opacity') {
				obj.style.opacity = (icur + speed) / 100;
				obj.style.filter = 'alpha(opacity:' + (icur + speed) + ')';
			} else {
				obj.style[attr] = (icur + speed) + 'px';
			}
		}	
		
		//清除定时器
		if(flag){
			clearInterval(obj.timer);
			if(fn){
				fn();
			}
		}		
	}, 1);
}


//获取任意属性
function getStyle(obj, attr) {
	if (obj.currentStyle) {
		return obj.currentStyle[attr]; //IE取样式
	} else {
		return getComputedStyle(obj, false)[attr];
	}
}


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

举报

0/150
提交
取消

难道大家都觉得flag是放在计时器里才对??我的天

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