json的一个问题
有毒啊,flag立在定时器外不能执行回调,立在定时器内的for外和内可以执行回调,但是同时运动出错,放在定时器外,在里面执行完后把flag变为true也不行,同步还是出错,怎么解决
有毒啊,flag立在定时器外不能执行回调,立在定时器内的for外和内可以执行回调,但是同时运动出错,放在定时器外,在里面执行完后把flag变为true也不行,同步还是出错,怎么解决
2016-07-23
我的可以,或许可以参考下,具体我也不太明白,得慢慢消化
function getStyle(node,attr){
if(node.currentStyle){
return node.currentStyle[attr];
}else{
return getComputedStyle(node,false)[attr];
}
}
//var timer = null;//如果没有定义这个,在e724.html文档中使用startMove(div1,{width:201,height:200,opacity:100});就会出现bug,即一个值完成后没有完成的也结束;
//另一种方法对运动进行判断:(是否全部完成)
//startMove(node,{attr1:tage1,attr2:tage2},fn)
function startMove(node,json,fn){
var flag = true;
clearInterval(node.timer);
node.timer=setInterval(function(){
for(var attr in json ){
//获取当前值
var icur = 0;
if(attr=='opacity'){
//parseFloat计算机存储问题,会有小数,如0.07*100=7.00000001;有Math.round()四舍五入去掉小数点;
icur = Math.round(parseFloat(getStyle(node,attr))*100);//乘于100为了适应filter: alpha(opacity:30);的写法
}else{icur = parseInt(getStyle(node,attr));}//使用透明度时变为0
//算速度
var speed = (json[attr]-icur)/10;
speed = speed>0?Math.ceil(speed):Math.floor(speed);
//检测停止
if(icur!= json[attr]){
flag = false;
}
if(attr=='opacity'){
node.style.filter = 'alpha(opacity:'+(icur+speed)+')';
node.style.opacity = (icur+speed)/100;
}else{node.style[attr] = icur+speed+"px";}
}
if(flag){
clearInterval(node.timer);
if(fn){
fn();
}
}
},30)
}
举报