图片轮播相信很多人都会直接去下载一个插件,改改就行了。但是,今天要给大家讲一下具体的原理。

具体的图如下面:

实现图片轮播,最重要的是控制好JQuery的代码,主要有以下几个要点需要注意:

1. 图片在没有鼠标事件的情况下,要实现图片轮播,就需要setInterval()定时函数进行轮播

2. 在图片轮播的时候,最下面的文字要变化,角标也需要变化

3. 点击左右箭头切换上一张或者下一张图片,要注意让自动轮播停止,给左右箭头绑定上一张或者下一张的事件

4.鼠标移动到任意一个角标,相应的图片要变,文字也要变

 

要了解的技术:

1.setInterval()函数的用法

2.JQuery的find()函数

3.JQuery的romveClass()函数

4.JQuery的addClass()函数

5.JQuery的eq()函数

6.JQuery的each()函数

代码展示:

html代码:

<body>

        <div id="wrapper">
            <div id="banner">
<!-- 轮播图片 -->
<ul class="imgList"> <li><img src="img/img1.jpg" width="400px" height="300px" alt="puss image1" /></li> <li><img src="img/img2.jpg" width="400px" height="300px" alt="puss image2" /></li> <li><img src="img/img3.jpg" width="400px" height="300px" alt="puss image3" /></li> <li><img src="img/img4.jpg" width="400px" height="300px" alt="puss image4" /></li> <li><img src="img/img5.jpeg" width="400px" height="300px" alt="puss image5" /></li> </ul> <!-- 左右箭头的图片 --> <img src="img/left.png" width="25px" height="60px" id="prev" /> <img src="img/right.png" width="25px" height="60px" id="next" /> <div id="bg"></div> <!-- 轮播文字 --> <ul class="infoList"> <li class="infoOn">puss image1</li> <li>puss image2</li> <li>puss image3</li> <li>puss image4</li> <li>puss image5</li> </ul> <!-- 轮播角标 --> <ul class="indexList"> <li class="indexOn">1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul> </div> </div> </body>

 

CSS样式:

body,div,ul,li,img{margin: 0;padding: 0;}

ul,li{list-style: none;}

#wrapper{position: relative;margin: 30px auto;width: 400px;height: 300px;border: 0px solid red;}

#banner{position: relative;width: 400px;height: 300px;border: 0px solid green;overflow: hidden;}

.imgList{position: relative;width: 2000px;height: 300px;z-index: 10;overflow: hidden;}

.imgList li{float: left;display: inline;}

#prev,#next{position: absolute;top: 120px;z-index: 20;cursor: pointer;opacity: 0.2;filter:alpha(opacity=20);}
#prev{left: 10px;}
#next{right: 10px;}

#prev:hover,#next:hover{opacity: 0.6;filter:alpha(opacity=60);}

#bg{position: absolute;bottom: 0;width: 400px;height: 40px;z-index: 20;background: black;opacity: 0.4;filter: alpha(opacity=40);}

.infoList{position: absolute;left: 10px;bottom: 10px;z-index: 30;}

.infoList li{display: none;}

.infoList .infoOn{display: inline;color: white;}

.indexList{position: absolute;right: 10px;bottom: 10px;background: b;z-index: 30;}

.indexList li{display: inline;cursor: pointer;background: gray;margin-left: 5px;padding: 2px 4px;}

.indexList .indexOn{background: wheat;font-weight: bold;}

js代码:

<script type="application/javascript" src="js/jquery-1.9.1.js"></script>
        <script type="application/javascript">
            $(function() {
                var count = 0;
                var imgLength = $(".imgList li").length;

                //alert("length:"+imgLength);
             
                /**
                 * 1.让图片通过setInterval()定时函数,实现图片自动滑动
                 * 2.点击左右按钮时,清除自动轮播,绑定左右切换事件
                 * 3.自动轮播事件,要注意图片动,相应的文字描述、角标也要跟随变化
                 */
                var autoChange = setInterval(function() {
                    if(count < imgLength - 1) {
                        count++;
                    } else {
                        count = 0;
                    }

                    //调用变化函数
                    toChange(count);
                }, 2500);
                
                /**
                 * 左箭头事件,鼠标划入,停止轮播;滑出,开始轮播
                 * 点击左箭头,表示上一页,这时要确定上一张图片的count数为多少
                 * @param {Object} count
                 */
                $("#prev").hover(function(){
                    clearInterval(autoChange);
                },function(){
                    autoChangeAgain();
                });
                
                $("#prev").click(function(){
                    count = (count >0)? (--count) : (imgLength-1);
                    toChange(count);
                });
                
                /**
                 * 右箭头事件,鼠标划入,停止轮播;滑出,开始轮播
                 * 点击右箭头,表示下一页,这时要确定下一张图片的count数为多少
                 * @param {Object} count
                 */
                
                $("#next").hover(function(){
                    clearInterval(autoChange);
                },function(){
                    autoChangeAgain();
                });
                
                $("#next").click(function(){
                    count = (count < imgLength-1)? (++count) : 0;
                    toChange(count);
                });
                
                /**
                 * 给下面的角标绑定滑入事件
                 */
                $(".indexList").find("li").each(function(item){
                    $(this).hover(function(){
                        clearInterval(autoChange);
                        toChange(item);
                        count = item;
                    },function(){
                        autoChangeAgain();
                    });
                });
                
                //这个函数要放在里面才可以,因为autoChange、count、ImLength参数都是提前声明好的,需要传承上一个调用函数的数据
                function autoChangeAgain(){
                    autoChange = setInterval(function() {
                        if(count < imgLength - 1) {
                            count++;
                        } else {
                            count = 0;
                        }
    
                        //调用变化函数
                        toChange(count);
                    }, 2500);
                }
            });
            
            function toChange(count) {
                /**
                 * 逻辑处理:
                 * 1.图片切换
                 * 2.文字切换
                 * 3.角标切换
                 */
                var moveLen = count * 400;
                $(".imgList").animate({
                    left: "-" + moveLen + "px"
                }, 500);
                $(".infoList").find("li").removeClass("infoOn").eq(count).addClass("infoOn");
                $(".indexList").find("li").removeClass("indexOn").eq(count).addClass("indexOn");
            }
        </script>

以上是具体的实现过程

 

posted on 2017-04-20 14:35  C碧水蓝天S  阅读(505)  评论(0编辑  收藏  举报