JavaScript小练习(二)jQuery实现banner图效果

一、实现目标

1.图片有自动循环播放效果;

2.右下角小圆点跟随图片的顺序改变;

3.点击小圆点转到对应图片;

4.鼠标进入图片区域停止播放,离开时继续播放。

二、效果图
(静态)
在这里插入图片描述
(动态)

在这里插入图片描述三、代码

html部分

<body>
        <div id="play" class="play">
            <ul id="dots" class="dots">
                <li class="active"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
            <ul id="imgs" class="imgs">
                <li><a href=""><img src="1.jpg" alt="图一"></a></li>
                <li><a href=""><img src="2.jpg" alt="图二"></a></li>
                <li><a href=""><img src="3.jpg" alt="图三"></a></li>
                <li><a href=""><img src="4.jpg" alt="图四"></a></li>
                <li><a href=""><img src="5.jpg" alt="图五"></a></li>
                <li><a href=""><img src="1.jpg" alt="图一"></a></li>
            </ul>
        </div>
    </body>

css部分

              *{ padding: 0px; margin: 0px;}
            img{ border: none;}
            body{ background: rgb(236,250,255);}

            #play{ position: relative; width: 1160px; height: 188px; top: 200px; left: 180px; overflow: hidden;}

            .dots{ width: 200px; height: 30px;  position: absolute; top: 165px; left: 1000px; }
            .dots li{ list-style: none; width: 30px; height: 20px; line-height: 20px; float: left;  z-index: 30; opacity: 0.5;
            /*background-color: white;*/ text-align: center; margin-left: 12px; font-size: 35px; color: rgb(97, 88, 97); 
            cursor: pointer; width: 10px; height: 10px; background-color: white; border-radius: 50%;}
            .dots .active{ opacity: 1; width: 30px; height: 10px; border-radius: 10px;}
           
            .imgs{ position: absolute; top: 0px; left: 0px; z-index: -1; display: flex; flex-wrap: nowrap;} 
            /*display: flex; flex-wrap: nowrap实现横向排列*/
            .imgs li{ list-style: none; float: left; }

js部分

        <script src="../jquery-1.10.1.min.js"></script>
        <script>
            $(function(){
                var aBtns =  $("#dots li");
                var oImg = $("#imgs");

                var iCount = 0;//记录当前小圆点的下标,便于计算与更改图片的位置
                var timer = null;//标记定时器

               //给小圆点添加点击事件
                aBtns.click(function(){
                    iCount = $(this).index();
                    tabImgs();
                })

                //当鼠标进入图片显示区域时取消定时器,图片停止运动
                $("#play").mouseenter(function(){
                    clearInterval(timer);
                    //鼠标离开时创建定时器,继续运动
                }).mouseleave(function(){
                    timer = setInterval(function(){
                        iCount ++;
                        tabImgs();
                    }, 2500)
                })

                //设置定时器自动轮播
                timer = setInterval(function(){
                        iCount ++;
                        tabImgs();
                    }, 2500)


                //小圆点和图片的同步切换
                function tabImgs(){
                    aBtns.attr("class", "").eq(iCount).attr("class", "active");

                    if(iCount == aBtns.size()){
                        aBtns.eq(0).attr("class", "active");
                    }
                    oImg.animate({
                        left: -1160 * iCount
                    }, 500, function(){
                        //到最后一张图时重置
                        if(iCount == aBtns.size()){
                            iCount = 0;
                            oImg.css("left", 0);
                        }
                    })
                }

            })

小tips:

1.这次的动画效果是靠jQuery的animate方法结合定时器实现的,比起原生js要方便一些。

2.在做类似循环banner图时要注意在最后一张图后添加上这组图的第一张图片,以免出现空图现象。

3.用iCount将图片下标与小圆点下标统一。当下标为iCount时,oImg整体向左运动iCount个图片的宽度,即iCount* -1160,产生动画效果。同时注意到边界时的处理。

4.对于大尺寸的照片,在处理类似效果时,要学会使用
display: flex;(弹性盒子布局) flex-wrap: nowrap;(不换行)进行横向排列。
flex:nowrap; 不换行(默认值)
flex: wrap; 换行

5.还需要不断记忆和掌握jQuery的方法,以便熟练使用。

(素材来源:携程网。 是恰好看到携程的banner图和自己想要实现的效果很相像,就模仿了一下,图片也是携程网下载的。)

欢迎提出建议。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值