zaxlctjs 2015-07-26 09:12 采纳率: 81%
浏览 1990
已采纳

JS利用定时器做的滑块效果,有一个小bug,自己找不到,求教下,谢谢大家

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>导航条推箱子</title>
<style type="text/css">
*{margin:0; padding:0;}
.main{background:#ccc; width:100%; height:42px;}
nav{width:950px; height:42px; position:relative; top:0; left:0; margin:auto; background:black;}
ul{position:absolute; left:0; top:6px;}
li{list-style:none; width:120px; background:black; float:left; margin:0 5px;
   text-align:center; color:white; font:14px/30px 黑体; z-index:2;}
li:hover{color:lightseagreen;}
#huakuai{width:130px; height:6px; position:absolute; left:0; top:36px;
         background:url('http://rawtj.photo.store.qq.com/psb?/V11aE2wE1DtywZ/..oVtPXI1JrwsrtdKOBiEWIC*vkOoS2ySJse0om9C3A!/r/dGEBAAAAAAAA') no-repeat;}
</style>
</head>
<body>
<div class="main">
    <nav>
        <ul>
            <li onmouseover="move(0)">首页</li>
            <li onmouseover="move(1)">所有产品</li>
            <li onmouseover="move(2)">男装</li>
            <li onmouseover="move(3)">女装</li>
            <li onmouseover="move(4)">新款</li>
        </ul>
        <div id="huakuai" style="left:0px;"></div>
    </nav>
</div>
</body>
<script type="text/javascript">
var tt=document.getElementById('huakuai');
function move(a){
    if(parseInt(tt.style.left)>(a*130)){
        timer=window.setInterval(function(){moveLeft(a*130);},30);
    }else if(parseInt(tt.style.left)<(a*130)){
        timer=window.setInterval(function(){moveRight(a*130);},30);
    }
     else{}
}
function moveRight(s1){
    var dd=parseInt(tt.style.left)+15;
    if(dd>=s1){
       dd=s1;
       window.clearInterval(timer);
    }
    tt.style.left=dd+'px';
}
function moveLeft(s2){
    var m=parseInt(tt.style.left)-15;
    if(m<=s2){
        m=s2;
        window.clearInterval(timer);
    }
    tt.style.left=m+'px';
}
</script>
</html>

这是定时器的一个小练习,鼠标放在不同的li上,下面的滑块会跟着移动
但是当鼠标来来回回在不停的li上移动时, 会出现bug,
就是滑块突然会在某一个位置突然停下,鼠标再放到其他的li上,滑块不动了
不知道代码哪里出错了

不好意思代码有点长,耽误大家的时间了,
新手自学JS遇到问题只能靠这里的朋友啦
谢谢

  • 写回答

3条回答 默认 最新

  • qq_26349351 2015-07-28 02:40
    关注

    <!DOCTYPE html>



    导航条推箱子
    <br> *{margin:0; padding:0;}<br> .main{background:#ccc; width:100%; height:42px;}<br> nav{width:950px; height:42px; position:relative; top:0; left:0; margin:auto; background:black;}<br> ul{position:absolute; left:0; top:6px;}<br> li{list-style:none; width:120px; background:black; float:left; margin:0 5px;<br> text-align:center; color:white; font:14px/30px 黑体; z-index:2;}<br> li:hover{color:lightseagreen;}<br> #huakuai{width:130px; height:6px; position:absolute; left:0; top:36px;<br> background:url(&#39;<a href="http://rawtj.photo.store.qq.com/psb?/V11aE2wE1DtywZ/..oVtPXI1JrwsrtdKOBiEWIC*vkOoS2ySJse0om9C3A!/r/dGEBAAAAAAAA&#x27;">http://rawtj.photo.store.qq.com/psb?/V11aE2wE1DtywZ/..oVtPXI1JrwsrtdKOBiEWIC*vkOoS2ySJse0om9C3A!/r/dGEBAAAAAAAA&#39;</a>) no-repeat;}<br>

    • 首页
    • 所有产品
    • 男装
    • 女装
    • 新款

    var tt=document.getElementById('huakuai'); var timer = null; function move(a){ clearInterval(timer) if(parseInt(tt.style.left)>(a*130)){ timer=window.setInterval(function(){ moveLeft(a*130); },30); console.log(tt.style.left) console.log(a) }else if(parseInt(tt.style.left)<(a*130)){ timer=window.setInterval(function(){ moveRight(a*130); },30); } else{} } function moveRight(s1){ var dd=parseInt(tt.style.left)+15; if(dd>=s1){ dd=s1; window.clearInterval(timer); } tt.style.left=dd+'px'; } function moveLeft(s2){ var m=parseInt(tt.style.left)-15; if(m<=s2){ m=s2; window.clearInterval(timer); } tt.style.left=m+'px'; }


    定时器还没关呢 移动之后又开了一个 冲突了啊 定时器先关再开

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?