关于完美运动框架小bug的修复,附源码
自己写了一遍完美框架,发现很多重要的小细节(主要还是变量声明的位置问题,即什么时候声明)。然后,看了楼下 @赫克托耳 同学的评论,说一下关于他提出的问题3:【无法执行回调函数的解决方法 】
1、我先用控制台在每次for-in循环的结尾输出了flag的值。发现,flag变为false后,没有使其变成true的触发语句啊(不知道老师为什么能执行,疑问)
2、也想过 @赫克托耳 同学提到的 if(json[attr] != curStyle){flag= false;}else{flag=true;} 这种。但这种肯定不对
3、于是想到在每次时间间隔开始置flag为true,
回调函数这一问题的解决方法,就是下面代码的第6行。
源码给大家了,大家最好自己敲一遍哦,反正我自己在敲得时候有太多问题了。
// 完美运动框架 function startMove(obj,json,fn){ var flag = true; clearInterval(obj.timer); obj.timer = setInterval(function(){ flag = true;// 亲们,就是这一句啊,重要的一句啊 var speed = 0, icur = null; for(var attr in json) { // 判断速度 if(attr == "opacity"){ icur = Math.round(parseFloat(getStyle(obj,attr))*100); }else{ icur = parseInt(getStyle(obj,attr)); } speed = (json[attr] - icur)/8; speed = speed>0?Math.ceil(speed):Math.floor(speed); // 判断临界值 if(icur != json[attr]){// 有一个属性没达到要求iT,flag就等于false flag = false; } if(attr == "opacity"){ obj.style.filter = "alpha(opacity:"+(icur+speed)+")"; obj.style.opacity = (icur+speed)/100; }else{ obj.style[attr] = icur+speed+"px"; } } if(flag){// 全部属性都达到要求iT拉 clearInterval(obj.timer); //alert(333); if(fn)fn(); //console.log("fn:"+fn);fn(); } //console.log("flag"+flag); },30); }
为自己手动点赞233333,还有好像评论说在IE下有bug,我还没有试