一个自己写的用jQuery的轮播图,点击速度过快会出bug

qq_33440621 2016-09-21 05:09:22
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src = "http://code.jquery.com/jquery-1.8.3.min.js "></script>
<style type="text/css">
*{ margin: 0; padding: 0;}
img{ display: block;}
#container{ width: 1920px; height: auto; margin: 50px auto;}
#container .banner{ width: 1920px; height: 420px; position: relative; overflow: hidden;}
#container .banner .center{ width: 818px; height: 418px; float: left;overflow: hidden; position: relative; border:1px solid #ccc}
#container .banner .center ul{ width: 5740px; height:420px; position: absolute; left:0;}
#container .banner .center ul li{ list-style: none; float: left; width:818px;
height:418px; border:1px solid red;}
.left_btn, .right_btn{
width: 70px;
height: 70px;
background: red;
position: absolute;
top: 175px;
}
.left_btn{
left: 0;
}
.right_btn{
right: 0;
}
.bottom_btn{
width: 220px;
height: 14px;
background-color: #000;
opacity: 0.5;
filter: alpha(opacity = 50);
border-radius:10px 10px 10px 10px;
padding: 3px 40px;
margin-top: 400px;
margin-left: 300px;
}
.bottom_btn div{
width: 15px;
height: 15px;
border-radius: 50%;
float: left;
margin-left: 20px;
background-color: #fff;
}
.red{
background-color: red;
}
</style>
</head>
<body>
<div id="container">
<div class="banner">
<div class="center">
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<div class="left_btn"></div>
<div class="right_btn"></div>
</div>
</div>
</div>
</body>
</html>
<script>
$(function(){
var lis = $("li");
var ul = $("ul");
var timer;
var count = 0;
move();
$(".center").mouseenter(function(){
clearInterval(timer);
$(".left_btn").css({"backgroundPosition":"-72px 0","display":"block"});
$(".right_btn").css({"backgroundPosition":"-72px -72px","display":"block"});
}).mouseleave(function(){
move();
$(".left_btn").css({"display":"block"});
$(".right_btn").css({"display":"block"});
});

function move(){
timer = setInterval(function(){
next();
},3000);
}
//-----------------point----------------------------
/* $(".point").click(function(){
count = $(this).index()-1;
ul.animate({ left : -count * 820 - 820 + "px"},"slow");
})*/
//-----------------left_btn上一张图片---------------
$(".left_btn").mouseover(function(){
$(".left_btn").css({"backgroundPosition":"0px 0px"});
}).click(function(){
if(count == 0){
count = 6;
ul.css("left",-count * 820 + "px");
}
before();
});
//-----------------rigth_btn下一张图片---------------
$(".right_btn").mouseover(function(){
$(".right_btn").css({"backgroundPosition":"0px -72px"});
}).click(function(){
if(count == 6){
count = 0;
ul.css("left", "0px");
}
next();
});
//-----------------下一张图片---------------
function next(){
//alert(parseInt($(ul).css("left")))
ul.animate({ left : -count++ * 820 - 820 + "px"},"slow")
}
//-----------------上一张图片---------------
function before(){
//alert(parseInt($(ul).css("left")))
ul.animate({ left : -count-- * 820 + 820 + "px"},"slow");
}
})
</script>
...全文
1451 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
everccnight 2016-10-02
  • 打赏
  • 举报
回复
加个stop()这样 每次 点击前就取消上一次的事件 就不会出现那个bug了
qq_33440621 2016-09-30
  • 打赏
  • 举报
回复

  ul.css("left",-count * 820  + "px");
搞定了,将这个换成

ul.animate({left:-count * 820  + "px"},0);
cossin2015 2016-09-24
  • 打赏
  • 举报
回复
为什么不用jquery animation功能 var down = true; 只有当down = true动画才能开始 ..... start: function(pro){ down = false; }, complete: function() { down = true; } 点击速度再快,都没关系。
业余草 2016-09-22
  • 打赏
  • 举报
回复
建议你看看插件源码? 和自己的对比一下 www.xttblog.com
  • 打赏
  • 举报
回复
引用 6 楼 qq_33440621 的回复:
这个是在做轮播图下面的1,2,3,4,5,6用的,所以注释了

var isMoving=false;
        var count = 0;
        var lis = $("li");
        var ul = $("ul");
        var timer;
    $(function(){
        move();
        $(".center").mouseenter(function(){
            clearInterval(timer);
            $(".left_btn").css({"backgroundPosition":"-72px 0","display":"block"});
            $(".right_btn").css({"backgroundPosition":"-72px -72px","display":"block"});
        }).mouseleave(function(){
            move();
            $(".left_btn").css({"display":"block"});
            $(".right_btn").css({"display":"block"});
        });

        function move(){
            timer = setInterval(function(){
            	if(!isMoving){
                	next();
            	}
            },3000);
        }
        //-----------------point----------------------------
        /*  $(".point").click(function(){
         count = $(this).index()-1;
         ul.animate({ left : -count * 820 - 820 + "px"},"slow");
         })*/
        //-----------------left_btn上一张图片---------------
        $(".left_btn").mouseover(function(){
            $(".left_btn").css({"backgroundPosition":"0px 0px"});
        }).click(function(){
            if(count == 0){
                count = 6;
                ul.css("left",-count * 820  + "px");
            }else{
            before();
            	
            }
        });
        //-----------------rigth_btn下一张图片---------------
        $(".right_btn").mouseover(function(){
            $(".right_btn").css({"backgroundPosition":"0px -72px"});
        }).click(function(){
            if(count == 6){
                count = 0;
                ul.css("left", "0px");
            }else{
            next();
            	
            }
        });
    })
        //-----------------下一张图片---------------
        function next(){
            if(!isMoving){
                isMoving=true;
                ul.animate({ left : -(++count * 820) + "px"},"slow",function(){isMoving=false;});
            }
        }
        //-----------------上一张图片---------------
        function before(){
        	if(!isMoving){
                isMoving=true;
                ul.animate({ left : -(--count * 820) + "px"},"slow",function(){isMoving=false;});
            }
        }
你试试这个呢,你的定时器产生了一定影响
  • 打赏
  • 举报
回复
引用 4 楼 qq_33440621 的回复:
你输出一下count的值,看一下吧 试试 -count-- * 820 + 820 改成-(--count* 820)
qq_33440621 2016-09-21
  • 打赏
  • 举报
回复
引用 5 楼 u011376884 的回复:
[quote=引用 4 楼 qq_33440621 的回复:]
你的count 值有改动吗?$(".point").click这方法让你注释了[/quote] 这个是在做轮播图下面的1,2,3,4,5,6用的,所以注释了
  • 打赏
  • 举报
回复
引用 4 楼 qq_33440621 的回复:
你的count 值有改动吗?$(".point").click这方法让你注释了
qq_33440621 2016-09-21
  • 打赏
  • 举报
回复
引用 2 楼 u011376884 的回复:

var isMoving=false;
 function before(){
            if(!isMoving){
                isMoving=true;
                ul.animate({ left : -count-- * 820 + 820 + "px"},"slow",function(){isMoving=false;});
            }
        }
加上判断值,判断一下是否正在移动就行了
没有用,当点击快了还是会出现bug,打断点会发现,当点击过快时(也就是说运动还没有做完的时候再次点击,刚好在最后一张图片的时候),ul.css("left", "0px");这个css()方法并没有执行;列如在ul.css("left", "0px");后加alert(“ok”);运行的时候并不弹出ok;
快跑蜗牛哥 2016-09-21
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复

var isMoving=false;
 function before(){
            if(!isMoving){
                isMoving=true;
                ul.animate({ left : -count-- * 820 + 820 + "px"},"slow",function(){isMoving=false;});
            }
        }
加上判断值,判断一下是否正在移动就行了

39,118

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧