json的一个问题

来源:6-2 完美运动框架

神王葬天

2016-07-23 11:27

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

写回答 关注

1回答

  • wajf
    2016-07-24 18:02: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)

    }


JS动画效果

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

113923 学习 · 1443 问题

查看课程

相似问题