JQ实现无缝滚动

1 篇文章 0 订阅
1 篇文章 0 订阅

用JQ做一个无缝滚动效果,图片自动轮播,左右按钮点击可切换图片,下面一排带索引的按钮可点击,点击到哪个就切换到对应的第几张图片,布局有些简陋,主要是实现效果,起初有bug,快速点击按钮时会有卡顿然后出现空白,解决办法在animate()后加stop(),可实现无缝滚动效果。

布局以及样式如下:一个大div(相对定位),里面放ul(装图片,最后一张图片跟第一张图片一样),左右两个按钮,以及下面的p标签(装有索引的按钮)全都相对于大div定位,给大div图片的宽度,给ul足够大的宽度,将图片左浮动,通过改变ul的left值来实现无缝滚动。思想:计时器改变left值,当走到最后一张图片时(跟第一张图片一样),通过0秒跳到第一张图片,继续运动。当点击左按钮,从索引为0的第一张图片转到前一张的时候,通过0秒跳到最后一张,并继续运动。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            ul,li {
                list-style: none;
            }
            a {
                text-decoration: none;
            }
            .main {
                width: 714px;
                height: 382px;
                margin: 50px auto;
                overflow: hidden;
                position: relative;//大DIV相对定位
            }
            .box {
                width: 10000px;
                position: absolute;
            }
            .box li {
                float: left;
            }
            .left {
                position: absolute;
                left: 0;
                top: 160px;
                display: blcok;
                height: 60px;
                width: 30px;
                background: url(img/left.png);//左按钮图片
                z-index: 100;
            }
            .right {
                position: absolute;
                right: 0;
                top: 160px;
                display: blcok;
                height: 60px;
                width: 30px;
                background: url(img/right.png);//右按钮图片
                z-index: 100;
            }
            .many_btn {
                position: absolute;
                bottom: 20px;
                left: 310px;
            }
            .many_btn a {
                display: block;
                height: 20px;
                width: 20px;
                float: left;
                text-align: center;
                line-height: 20px;
                margin-right: 10px;
                border-radius: 100%;
                background: white;
                color: #000;
            }
            .many_btn .active {
                background: red;
            }
        </style>
        <script type="text/javascript" src="js/jquery-1.11.3.js"></script> //引入的jq文件
    </head>
    <body>
        <div class="main">
            <ul class="box">//装图片的div
                <li><img src="img/top1.jpg"/></li>
                <li><img src="img/top2.jpg"/></li>
                <li><img src="img/top3.jpg"/></li>
                <li><img src="img/top4.jpg"/></li>
                <li><img src="img/top5.jpg"/></li>
                <li><img src="img/top1.jpg"/></li>
            </ul>
            <a class="left" href="javascript:;"></a>//左按钮
            <a class="right" href="javascript:;"></a>//右按钮
            <p class="many_btn">//
                <a class="active" href="###">1</a>
                <a href="###">2</a>
                <a href="###">3</a>
                <a href="###">4</a>
                <a href="###">5</a>
            </p>
        </div>
    </body>
</html>

//下面是实现无缝滚动的JQ代码

<script type="text/javascript">
    var timer = 0; //定时器初始化
    var index = 0; //图片索引值
    var left = 714;//图片的宽度
    var $len = $(".box>li").size();//图片的数量
    
    function autoImg(){
        clearInterval(timer);//开启一个新的计时器前需要清空之前的计时器
        timer = setInterval(function(){//开启计时器
            index ++;//切换下一张图片
            tab();
        },2000);
    }
    autoImg();//调用计时器
    
    $(".left").click(function(){//给左按钮添加点击事件
        index --;//往左走图片的索引值是变小的
        tabImg();//实现轮播
        autoImg();//开启计时器
    });
    $(".right").click(function(){//给右按钮添加点击事件
        index ++;//往左右走图片的索引值是变大的
        tab();//实现轮播
        autoImg();//开启计时器
    });
    $(".many_btn a").click(function(){//给下面按钮添加点击事件
        clearInterval(timer);//开启一个新的计时器前需要清空之前的计时器
        index = $(this).index();//将当前按钮的索引赋值给index
        $(".box").stop().animate({left: - index * left},0);//通过获取的索引来算出left值
        $(".many_btn a").eq(index).addClass("active").siblings().removeClass("active");//使当前下面的索引背景随着图片滚动变色
        autoImg();//开启计时器
    });
    
    function tab(){//轮播函数
        if(index > $len - 1){//当运动到最后一张图片
            $(".box").stop().animate({left:0},0,function(){//用0秒跳转到第一张图片后继续运动
                index = 1//让索引变为1,目的是刚跳转到第一张图片立即运动第二张图片,实现无缝滚动
                $(".box").stop().animate({left:-index*left},500);
            });
        }else{
            $(".box").stop().animate({left:-index*left},500);//每隔500毫秒left值减一张图片的宽度,也就是显示出下一张图片
        }
        $(".many_btn a").eq(index).addClass("active").siblings().removeClass("active");//使当前下面的索引背景随着图片滚动变色
    }
    
    function tabImg(){
        if(index < 0){//当从第一张图到前一张图
            $(".box").stop().animate({left:- ($len - 1) * left},0,function(){//立刻跳转到最后一张图
                index = $len - 2;让索引变为倒数第二张,目的是刚跳转到最后一张图片立即运动到倒数第二张图片,实现无缝滚动
                $(".box").stop().animate({left:- index * left},500);
            });
        }else{
            $(".box").stop().animate({left: - index * left},500);//每隔500毫秒left值减一张图片的宽度,也就是显示出下一张图片
        }
        $(".many_btn a").eq(index).addClass("active").siblings().removeClass("active");//使当前下面的索引背景随着图片滚动变色
    }
</script>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值