请问我的代码错误哪里!非常感谢!

来源:4-1 JS多物体动画

Mycat_

2016-08-06 20:39

<!doctype html>

<html>

 <head>

   <title>多物体运动动画</title>

   <meta charset="utf-8">

   <style>

   *{margin:0;padding: 0px;color: #FFF}

   ul,li{list-style: none}

   ul li{background: yellow;width: 200px;height: 100px;margin-bottom: 20px}

   </style>

   <script type="text/javascript">

   window.onload=function(){

      var lis=document.getElementsByTagName('li');

      for(var i=0;i<lis.length;i++){

         lis[i].onmouseover=function(){

            startMove(this,400)

         }

         lis[i].onmouseout=function(){

            startMove(this,200)

         }

      }

   }

   var timer=null;

   function startMove(obj,iTarget){

      clearInterval(timer);

      timer=(function(){

         var speed=(iTarget-obj.offsetWidth)/8;

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

         if(obj.offsetWidth==iTarget){

            clearInterval(timer);

         }

         else{

            obj.style.width=obj.offsetWidth+speed+'px';

         }

      },30)

   }

   </script>

 </head>

<body>

   <ul>

      <li></li>

      <li></li>

      <li></li>

   </ul>

</div>

</body>

</html>


写回答 关注

2回答

  • 慕仰6432972
    2016-08-06 22:29:37
    已采纳

    首先你的

     

      function startMove(obj,iTarget){

          clearInterval(timer);

          timer=(function(){

             var speed=(iTarget-obj.offsetWidth)/8;

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

             if(obj.offsetWidth==iTarget){

                clearInterval(timer);

             }

             else{

                obj.style.width=obj.offsetWidth+speed+'px';

             }

          },30)

       }

    这一段,你的setInterval没写,而且要注意需要给每一个obj定义一个定时器,所以应该写成obj.timer=setInterval(function(){},30),两个clearInterval(timer);也应该写成clearInterval(obj.timer);

    另外在你的for循环里面你没给每一个子标签定义一个定时器,应该加一行

    for(var i=0;i<lis.length;i++){

             lis[i].timer=null;(注意这个地方timer是给lis[i]的一个属性,所以不需要定义成变量,不用在前面加 var)

             lis[i].onmouseover=function(){

                startMove(this,400)

             }

             lis[i].onmouseout=function(){

                startMove(this,200)

             }

          }

    重新回答一次,这里面下划线的是错误代码,粗体是正确代码,你自己对比看看

    Mycat_

    非常感谢!

    2016-08-06 22:44:06

    共 1 条回复 >

  • 慕仰6432972
    2016-08-06 22:26:52

    首先你的

     

      function startMove(obj,iTarget){

          clearInterval(timer);

          timer=(function(){

             var speed=(iTarget-obj.offsetWidth)/8;

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

             if(obj.offsetWidth==iTarget){

                clearInterval(timer);

             }

             else{

                obj.style.width=obj.offsetWidth+speed+'px';

             }

          },30)

       }

    这一段,你的setInterval没写,而且要注意需要给每一个obj定义一个定时器,所以应该写成obj.timer=setInterval(function(){},30),两个clearInterval(timer);也应该写成clearInterval(obj.timer);

    另外在你的for循环里面你没给每一个子标签定义一个定时器,应该加一行

    or(var i=0;i<lis.length;i++){

             lis[i].timer=null;(注意这个地方timer是给lis[i]的一个属性,所以不需要定义成变量,不用在前面加 var)

             lis[i].onmouseover=function(){

                startMove(this,400)

             }

             lis[i].onmouseout=function(){

                startMove(this,200)

             }

          }


JS动画效果

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

113925 学习 · 1443 问题

查看课程

相似问题