jQuery实现轮播图的总结

目录

jQ实现轮播

思路:

jQ思路:

关于轮播图加快点击bug问题

源码记录


jQ实现轮播

思路:

1.轮播图在网页内运用的非常常见。今天我就来总结一下jQ轮播图。

轮播图案列思路

 2.我们通常将img套在ul li中,放在一个大的div中,并放在页面的固定位置。我们可以加大ul的宽度,并让li浮动起来(如果你是上下移动,就加大ul的高度),我们让ul移动,带着li移动,而不是只让li移动。

3.当ul超出div的部分,我们就隐藏,那么问题来了,我们赢该怎样隐藏超出div的部分呢?哈哈!!相信聪明的你一定想起来怎样隐藏了, 对!!! 就是在div中设置他的overflow:hidden   。

4.这样我们就是基本的思路了。至于轮播图的两耳和下方的1 2 3 4·····,这个不难吧!!

jQ思路:

前面已经说了,要用ul带动li的方式来实现移动,那么我们当然要先获取ul了, 通过父相子绝的定位方式,调节子元素的left值,来完成轮播图。

用定时器setInterval()自动的该变图片的left(或top),的值 。 那么问题又来了。当移动到最后一张咋办?直接到达第一张图?NO!!!!  NO!!  NO!!!!  ,那样真的太难看了。我们要在最后一个图片下面设置一个猫腻图,把第一张图片在复制一个放下最后一张的下面,当轮播到猫腻图,我们就瞬移到最前面,这样我们就能“欺骗”大众的眼睛。

   $(function () {
            var obtn = $('.nav ol li');
            var oul = $('.nav ul');
            var oli = oul.find('li');
            var flag =false;//这个暂时没有
            /*当前显示图片的*/
            var iNow = 0;//设置图片的初始是第一个图片
            console.log(obtn.size());//打印现在图片的总个数
            //注册当点击下面序号的事件

            obtn.click(function () {
                iNow = $(this).index();
                tab();
            });

            //启用定时器
            var timer =null;
            timer = setInterval(function () {
                iNow++;
                tab()
            },2000);
            //注册鼠标移入事件
            $('.nav').mouseenter(function () {
                clearInterval(timer);
                $(".nav-l").css("display","block");
                $(".nav-r").css("display","block");
            });
            //注册鼠标移出事件
            $(".nav").mouseleave(function () {
                $(".nav-l").css("display","none");
                $(".nav-r").css("display","none");
                timer = setInterval(function () {

                    iNow++;

                    tab()
                },2000);
            });
              //注册右耳的点击事件
            $('.nav-r').click(function () {
                // iNow++;
                // tab()
                //改变信号量

                iNow++;
                obtn.attr("class",'').eq(iNow).attr("class",'active');
                if(iNow==obtn.size()) {
                    obtn.eq(0).attr('class', 'active');
                }
                if(iNow>obtn.size()){
                    //让其展示第一张图片
                    iNow =0;
                }
                    flag =true;
               oul.stop(true,true).animate({
                   //该对象描述的是动画的目标值
                   left: -520 *iNow

               },500,function () {
                    //动画执行完毕执行
                   if(iNow == obtn.size()){
                       flag=false;
                       oul.css("left",0);
                       iNow=0;

                   }
                });


            });


            //注册左侧的点击事件
            $('.nav-l').click(function () {
                // iNow--;
                // obtn.attr("class",'').eq(iNow).attr("class",'active');
                // if(iNow==obtn.size()){
                //     obtn.eq(0).attr('class','active');
                // }
                // oul.animate({
                //     left:-520*iNow
                // },500,function () {
                //     //判断是否是最后一张图片
                //     if(iNow<=0){
                //         iNow = obtn.size();
                //         oul.css("left",-520*iNow);
                //     }
                // });
                iNow--;
                obtn.attr("class",'').eq(iNow).attr("class",'active');
                 if(iNow==obtn.size()) {
                     obtn.eq(0).attr('class', 'active');
                 }
                if(iNow<0){
                    oul.css('left',-520*obtn.size());
                    //改变信号量
                    iNow = obtn.size()-1;
                }
                oul.stop(true,true).animate({
                    left:-520*iNow
                },500);
            });
            //设置自动滚动的函数,增加复用性
            function tab() {
                //让序号跟着移动
                obtn.attr("class",'').eq(iNow).attr("class",'active');
                if(iNow==obtn.size()){
                    obtn.eq(0).attr('class','active');
                }
                oul.animate({
                    left:-520*iNow
                },500,function () {
                    //判断是否是最后一张图片
                    if(iNow==obtn.size()){
                        iNow = 0;
                        oul.css("left",0);
                    }
                });
            }
        });

关于轮播图加快点击bug问题

我的解决办法是在动画的animate()前加上一个stop(true,true)来防止由于加快点击出现的bug。

 

源码记录

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQ轮播图</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .nav{
            position: relative;
            width: 520px;
            height: 280px;
            margin: 100px auto;
            /*border: 1px solid red;*/
            overflow: hidden;
        }
        .nav ul{
            position: absolute;
            top: 0;
            left: 0;
            width: 9999px;
            height: 280px;
        }
        .nav li{
            float: left;
            list-style: none;
        }
        .nav li img{
            width: 520px;
            height: 280px;

        }
        .nav-l{
            position: absolute;
            display: none;
            top: 50%;
            left: 0;
            width: 20px;
            height: 20px;
            transform: translateY(-50%);
            background-color: rgba(0,0,0,.2);
            z-index: 1;
            cursor: pointer;
            text-align: center;
        }
        .nav-r{
            position: absolute;
            display: none;
            top: 50%;
            right: 0;
            width: 20px;
            height: 20px;
            transform: translateY(-50%);
            background-color: rgba(0,0,0,.2);
            z-index: 1;
            cursor: pointer;
            text-align: center;

        }
        .nav ol{
            position: absolute;
            bottom: 5px;
            right: 5px;

        }
        .nav ol li{
            float: left;
            width: 20px;
            text-align: center;
            margin-right: 7px;
            display: inline;;
            cursor: pointer;
            background-color: #fcf2cf;
            border: 1px solid #f47500;
        }
        .active{
            /*padding: 3px 8px;*/
            font-weight: bold; color: #0080db;
            background-color: #0080db;
            position: relative;
            bottom: 2px;
            color: red;
        }
    </style>

    <script type="text/javascript" src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
    <script>
        $(function () {
            var obtn = $('.nav ol li');
            var oul = $('.nav ul');
            var oli = oul.find('li');
            var flag =false;
            /*当前显示图片的*/
            var iNow = 0;
            console.log(obtn.size());

            obtn.click(function () {
                iNow = $(this).index();
                tab();
            });

            //启用定时器
            var timer =null;
            timer = setInterval(function () {
                iNow++;
                tab()
            },2000);
            //注册鼠标移入事件
            $('.nav').mouseenter(function () {
                clearInterval(timer);
                $(".nav-l").css("display","block");
                $(".nav-r").css("display","block");
            });
            //注册鼠标移出事件
            $(".nav").mouseleave(function () {
                $(".nav-l").css("display","none");
                $(".nav-r").css("display","none");
                timer = setInterval(function () {

                    iNow++;

                    tab()
                },2000);
            });

            $('.nav-r').click(function () {
                // iNow++;
                // tab()
                //改变信号量

                iNow++;
                obtn.attr("class",'').eq(iNow).attr("class",'active');
                if(iNow==obtn.size()) {
                    obtn.eq(0).attr('class', 'active');
                }
                if(iNow>obtn.size()){
                    //让其展示第一张图片
                    iNow =0;
                }
                    flag =true;
               oul.stop(true,true).animate({
                   //该对象描述的是动画的目标值
                   left: -520 *iNow

               },500,function () {
                    //动画执行完毕执行
                   if(iNow == obtn.size()){
                       flag=false;
                       oul.css("left",0);
                       iNow=0;

                   }
                });


            });



            $('.nav-l').click(function () {
                // iNow--;
                // obtn.attr("class",'').eq(iNow).attr("class",'active');
                // if(iNow==obtn.size()){
                //     obtn.eq(0).attr('class','active');
                // }
                // oul.animate({
                //     left:-520*iNow
                // },500,function () {
                //     //判断是否是最后一张图片
                //     if(iNow<=0){
                //         iNow = obtn.size();
                //         oul.css("left",-520*iNow);
                //     }
                // });
                iNow--;
                obtn.attr("class",'').eq(iNow).attr("class",'active');
                 if(iNow==obtn.size()) {
                     obtn.eq(0).attr('class', 'active');
                 }
                if(iNow<0){
                    oul.css('left',-520*obtn.size());
                    //改变信号量
                    iNow = obtn.size()-1;
                }
                oul.stop(true,true).animate({
                    left:-520*iNow
                },500);
            });
            function tab() {
                obtn.attr("class",'').eq(iNow).attr("class",'active');
                if(iNow==obtn.size()){
                    obtn.eq(0).attr('class','active');
                }
                oul.animate({
                    left:-520*iNow
                },500,function () {
                    //判断是否是最后一张图片
                    if(iNow==obtn.size()){
                        iNow = 0;
                        oul.css("left",0);
                    }
                });
            }
        });
    </script>


</head>
<body>
    <div class="nav" >
        <div class="nav-l" id="nav-l"><</div>
        <div class="nav-r" id="nav-r">></div>
        <ul>
            <li><img src="images/nav1.jpg" alt=""></li>
            <li><img src="images/nav2.jpg" alt=""></li>
            <li><img src="images/nav3.jpg" alt=""></li>
            <li><img src="images/nav4.jpg" alt=""></li>
            <li><img src="images/nav5.jpg" alt=""></li>
            <li><img src="images/nav1.jpg" alt=""></li>
        </ul>
        <ol>
            <li class="active">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ol>
    </div>
</body>
</html>

 

ps:可能某些地方还有小bug,以后有时间再看看吧,毕竟比较忙

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值