不知道是不是dom事件冒泡的问题,求指教!!!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>匀速动画</title>
<style type="text/css">
 html,body{margin:0;padding:0;}
.owl-carousel{ position:relative; width:1370px; height:600px; margin:0 auto; overflow:hidden;}
.owl-carousel ul,li{ list-style:none; padding:0; margin:0;}
.owl-carousel .btnleft{ position:absolute; left:0; top:256px; z-index:3; width:60px; height:60px; background-color:#333; cursor:pointer;}
.owl-carousel .btnleft:hover{ background-color:#C00; transition:all 0.6s;}
.owl-carousel .btnright{ position:absolute; right:0; top:256px; z-index:3; width:60px; height:60px; background-color:#333; cursor:pointer;}
.owl-carousel .btnright:hover{ background-color:#C00; transition:all 0.6s;}
</style>
</head>
<body>
   <div id="g-side" class="owl-carousel" >
      <ul class="g-side-box">
         <li class="item"><a href="images/img_large_1.jpg" class="image-popup"><img src="img_large_1.jpg" alt="image"></a></li>
         <li class="item"><a href="images/img_large_2.jpg" class="image-popup"><img src="img_large_2.jpg" alt="image"></a></li>
         <li class="item"><a href="images/img_large_3.jpg" class="image-popup"><img src="img_large_3.jpg" alt="image"></a></li>
         <li class="item"><a href="images/img_large_4.jpg" class="image-popup"><img src="img_large_4.jpg" alt="image"></a></li>
         <li class="item"><a href="images/img_large_5.jpg" class="image-popup"><img src="img_large_5.jpg" alt="image"></a></li>
      </ul>  
   </div>
</body>
</html>
<script language="javascript">
  window.onload = function(){
    var SideBox = document.getElementById("g-side");
    var SideBox_UL = SideBox.getElementsByTagName("ul")[0];
    var SideBox_UL_Li = SideBox.getElementsByTagName("li");
    var SideBox_btn_l = document.createElement("p");
    var SideBox_btn_r = document.createElement("p");
    SideBox_btn_l.className = "btnleft";
    SideBox_btn_r.className = "btnright";
    SideBox_btn_l.style.left = "-60px";
    SideBox_btn_r.style.right = "-60px";
    SideBox.appendChild(SideBox_btn_l);
    SideBox.appendChild(SideBox_btn_r);

    SideBox.onmouseover = function (e) {
       if (!e) e = window.event;
       var reltg = e.relatedTarget ? e.relatedTarget : e.fromElement;
       while (reltg && reltg != this) reltg = reltg.parentNode;
       if (reltg != this) {
           startMover(SideBox_btn_l,0);
           startMover(SideBox_btn_r,1310);  
       }
    }
    SideBox.onmouseout = function (e) {
       if (!e) e = window.event;
       var reltg = e.relatedTarget ? e.relatedTarget : e.toElement;
       while (reltg && reltg != this) reltg = reltg.parentNode;
       if (reltg != this) {
           startMover(SideBox_btn_l,-60);
           startMover(SideBox_btn_r,1370); 
       }
    }
        
    function startMover(el,itarget){
       var timer = null;    
       clearInterval(timer);  
       var odiv = el;
       timer = setInterval(function(){  
          var speed = 0;  
          if(odiv.offsetLeft > itarget){  
             speed = -5;  
          }else{  
             speed = 5;  
          }  
          if(odiv.offsetLeft == itarget){ 
             clearInterval(timer);
          }else{  
             odiv.style.left = odiv.offsetLeft+speed+'px';
          }
       },20);        
     }
}
</script>

这是一个完整的幻灯js代码 原生js写的 但是有个问题是鼠标每次移动到左右按钮上时就会抽风,乱动。 查遍百度不知如何解决,求指教!!!!!

阅读 3.2k
5 个回答

动画没清除

    function startMover(el,itarget){
       clearInterval(el.timer);  

       var odiv = el;
       el.timer = setInterval(function(){  
          var speed = 0;  
          if(odiv.offsetLeft > itarget){  
             speed = -5;  
          }else{  
             speed = 5;  
          }  
     
          if(odiv.offsetLeft == itarget){ 
             clearInterval( el.timer);
          }else{  
             odiv.style.left = odiv.offsetLeft+speed+'px';
          }
       },20);        
     }

改成这样

楼主,你确定你代码能动?我拷过去怎么没有效果?左右键按了没反应,你是想问这个?

主要问题是setInterval定时器没有清除,你把setInterval返回的id绑定在了startMover函数的局部变量中。正确的做法是把定时器返回的id绑定在全局变量上,比如你传入的DOM节点上

 function startMover(el,itarget){
   clearInterval(el.timer); 
   el.timer = null; 
   var odiv = el;
   el.timer = setInterval(function(){  
      var speed = 0;  
      if(odiv.offsetLeft > itarget){  
         speed = -5;  
      }else{  
         speed = 5;  
      }  
      if(odiv.offsetLeft == itarget){ 
         clearInterval(el.timer);
      }else{  
         odiv.style.left = odiv.offsetLeft+speed+'px';
      }
   },20);        
 }

在startMover里面你定义的timer是一个新的变量,你每次都去清除是他。

太长不看,但是没听过js冒泡?
是冒泡排序吗?

问题都问不好,您还是去百度问吧。
js冒泡和dom事件冒泡不是一个东西

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题