10点
2017-03-26 16:30
flag 放在计时器里跟没定义一个卵样,会出现bug,有些同志没有经过完全的调试就以为找出了一个bug;其实不然,运行的时候打开F12看看高宽就知道了,
flag是要放到计时器里的,同时if(flag)要放到for in循环的后面而不是里面,这样宽高就都对了
我的也有问题,加了if(flag)后链式运动执行不了了,因为链式运动一次只改变一个属性,然后达到后定时器就清空了,后面的就不执行了
楼主是没把if (flag)放在计时器外?
我的运行的很正常 也么有什么数据误差,,,
在flag为false时定时器会一直执行,每次执行时都会重置为true,直到所有的都达到目标值,就不会再为false了,然会就能执行下一个运动
//同步运动函数 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]; } }
JS动画效果
113923 学习 · 1443 问题
相似问题