json的一個問題
有毒啊,flag立在定時器外不能執(zhí)行回調(diào),立在定時器內(nèi)的for外和內(nèi)可以執(zhí)行回調(diào),但是同時運動出錯,放在定時器外,在里面執(zhí)行完后把flag變?yōu)閠rue也不行,同步還是出錯,怎么解決
有毒啊,flag立在定時器外不能執(zhí)行回調(diào),立在定時器內(nèi)的for外和內(nèi)可以執(zhí)行回調(diào),但是同時運動出錯,放在定時器外,在里面執(zhí)行完后把flag變?yōu)閠rue也不行,同步還是出錯,怎么解決
2016-07-23
舉報
2016-07-24
我的可以,或許可以參考下,具體我也不太明白,得慢慢消化
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});就會出現(xiàn)bug,即一個值完成后沒有完成的也結(jié)束;
//另一種方法對運動進行判斷:(是否全部完成)
? ? ? ?
//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計算機存儲問題,會有小數(shù),如0.07*100=7.00000001;有Math.round()四舍五入去掉小數(shù)點;
? ? ? ? ? ? ? ? icur = Math.round(parseFloat(getStyle(node,attr))*100);//乘于100為了適應filter: alpha(opacity:30);的寫法
? ? ? ? ? }else{icur = parseInt(getStyle(node,attr));}//使用透明度時變?yōu)?
? ? ? ? ? //算速度
? ? ? ? ? ? ? ?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)
}