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

能不能帮我看看问题在哪里呢? 麻烦了

function getStyle(obj,attr){

if(obj.currentStyle){

return obj.currentStyle[attr];

}else{

return getComputedStyle(obj,false)[attr];

}

}



function startMove(obj,json,fn){

obj.timer=null;

clearInterval(obj.timer);

obj.timer=setInterval(function(){

for(var attr in json){

var flag=true;

var speed=0;

var icur;

if(attr=="opacity"){

icur=Math.round(parseFloat(getStyle(obj,attr))*100);

}else{

icur=parseInt(getStyle(obj,attr));

}   

       speed=(json[attr]-icur)/10;

       speed= speed>0?Math.ceil(speed):Math.floor(speed);

    

       if(attr=="opacity"){

       obj.style.filter="alpha(opacity:"+(icur+speed)+")";

       obj.style.opacity=(icur+speed)/100;


       }else{

       obj.style[attr]=icur+speed+"px";

       }


       if(icur!=json[attr]){

        flag=false;        

       }

       if(flag){

        clearInterval(obj.timer);

       if(fn){

       fn();

       }

       }  

        }

},30)

}


正在回答

2 回答

function getStyle(obj,attr){

if(obj.currentStyle){//Ie浏览器

return obj.currentStyle[attr];

}

else{

return getComputedStyle(obj,false)[attr];//谷歌浏览器

}

}

//调用示例:move(div1,{width:201,height:200,opacity:10},function(){alert('ddadasd');});

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)/8;

speed=speed>0?Math.ceil(speed):Math.floor(speed);//取整

  if(icur!=json[attr]){//判断是否完成

  if(attr=='opacity'){//判断透明度

  obj.style.filter='alpha(opacity:'+(icur+speed)+')';//IE透明度

  obj.style.opacity=(icur+speed)/100;//谷歌透明度

  }else{

  obj.style[attr]=icur+speed+"px";

  }

  flag=false;

  }

 

 

 

  }

  if(flag){

  clearInterval(obj.timer);//清楚定时器

  if(fn){

  fn();//执行回掉函数

  }

  }

  },30);




}



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

var flag=true;放在循环外定时器内;

 if(flag){

        clearInterval(obj.timer);

       if(fn){

       fn();

       }

       }

放在循环外

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

慕田峪5928195 提问者

不好意思 这几天没上慕课网没看见哈,我刚刚试了 还是不行啊,和之前一样 一直不停的跳动,不能完成整个运动啊
2016-10-21 回复 有任何疑惑可以回复我~
#2

慕粉aidan 回复 慕田峪5928195 提问者

var flag=true; 一定要放在定时器外面,因为函数一次遍历的过程消耗的事件>30ms,所以不是你所谓的放“循环外定时器内”,自己动手console.log() 输出看看就知道结果了
2016-10-24 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

能不能帮我看看问题在哪里呢? 麻烦了

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