问答详情
源自:6-2 完美运动框架

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

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

提问者:10点 2017-03-26 16:30

个回答

  • 那X_X
    2017-04-24 19:41:48

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

  • 杨辰沁再不疯狂就老了
    2017-04-11 22:00:07

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

  • 洋葱宝宝
    2017-04-08 13:11:14

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

  • qq_简单点_14
    2017-04-02 19:34:54

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


  • 慕哥1038968
    2017-03-27 14:57:55

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

  • 六月ovo
    2017-03-27 14:14:03

    //同步运动函数
    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];
    	}
    }