为了账号安全,请及时绑定邮箱和手机立即绑定

json的一个问题

有毒啊,flag立在定时器外不能执行回调,立在定时器内的for外和内可以执行回调,但是同时运动出错,放在定时器外,在里面执行完后把flag变为true也不行,同步还是出错,怎么解决

正在回答

1 回答

我的可以,或许可以参考下,具体我也不太明白,得慢慢消化

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)

}


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JS动画效果
  • 参与学习       113926    人
  • 解答问题       1443    个

通过本课程JS动画的学习,从简单动画开始,逐步深入各种动画框架封装

进入课程

json的一个问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信