jQuery实现图片轮播效果

先上效果图:
jQuery实现图片轮播效果_第1张图片
当点击右边的箭头时,图片就会切换到下一张
jQuery实现图片轮播效果_第2张图片
先明确一下图片的排布方式,再上HTML代码。

  1. 首先是一个外围部分div,也就是所说的wrapper;
  2. 然后是放图片轮播的div,也就是所说的banner;
  3. 然后是图片组,此处我用的是ul->li;
  4. 然后是图片左右两端的箭头;
  5. 然后是一个透明背景层div,放在图片底部;
  6. 然后是一个图片描述info层,放在图片底部左下角。此处我用的也是ul->li;
  7. 然后是一个图片页码索引index层,放在图片底部右下角。此处我也用ul->li;

下面是HTML代码:

<body>   
        <div id="wrapper">         
            <div id="banner">      
                <ul class="imgList">
                    <li><img src="images/france01.jpg" width="400px" height="200px">li>
                    <li><img src="images/france02.jpg" width="400px" height="200px">li>
                    <li><img src="images/france03.jpg" width="400px" height="200px">li>
                    <li><img src="images/france04.jpg" width="400px" height="200px">li>
                    <li><img src="images/france05.jpg" width="400px" height="200px">li>
                    <li><img src="images/france06.jpg" width="400px" height="200px">li>
                    <li><img src="images/france07.jpg" width="400px" height="200px">li>
                    <li><img src="images/france08.jpg" width="400px" height="200px">li>
                    <li><img src="images/france09.jpg" width="400px" height="200px">li>
                ul>
                <img src="images/icon/prev.png" title="上一页" id="prev">
                <img src="images/icon/next.png" title="下一页" id="next">
                <div class="bg">div> 
                 <ul class="infoList">
                    <li class="infoOn">法国美景1li>
                    <li>法国美景2li>
                    <li>法国美景3li>
                    <li>法国美景4li>
                    <li>法国美景5li>
                    <li>法国美景6li>
                    <li>法国美景7li>
                    <li>法国美景8li>
                    <li>法国美景9li>
                ul>
                <ul class="indexList">
                    <li class="indexOn">1li>
                    <li>2li>
                    <li>3li>
                    <li>4li>
                    <li>5li>
                    <li>6li>
                    <li>7li>
                    <li>8li>
                    <li>9li>
                ul>
            div>
        div>
body>

图片轮播效果与CSS样式密不可分,所以CSS是实现这个功能的关键之一。它有以下几个需要注意的要点:

  1. banner部分要将溢出的元素隐藏,也就是播放的图片进行隐藏。需要用overflow:hidden样式。
  2. 要让列表li横向排布,采用浮动:float:left;并且要使元素在一行显示,需要用到内联元素:display:inline;
  3. 要使背景透明化,需要用到opacity: XX;filter: alpha(opacity=XX;)

上图完整的CSS样式如下:

body,div,ul,li,a,img{margin:0;padding: 0;}
    ul,li{list-style: none}

    #wrapper{
        position: relative;
        margin:30px auto;
        width: 400px;
        height: 200px;
    }
    #banner{
        position: relative;
        width: 400px;
        height: 200px;
        overflow: hidden;
    }
    .imgList{
        position: relative;
        width: 3600px;
        height: 200px;
        z-index:10;
        overflow: hidden;
    }
    .imgList li{
        float: left;
        display: inline;
    }
    #prev,#next{
         position: absolute;
         top:80px;
         z-index: 20;
         cursor: pointer;
         opacity: 0.2;
         filter:alpha(opacity=20);
    }
    #prev{left: 10px;}
    #next{right: 10px;}
    #prev:hover,#next:hover{
        opacity: 0.5;filter: alpha(opacity=50;)
    }
    .bg{
        position: absolute;
        bottom: 0;
        width: 400px;
        height: 40px;
        z-index:20;
        opacity: 0.4;
        filter:alpha(opacity=40);
        background: black;}
    .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: 5px;
        z-index: 30;
    }
    .indexList li{
        float: left;
        margin-right: 5px;
        padding: 2px 4px;
        border: 2px solid black;
        background: #DDDDDD;
        opacity: 0.5;filter: alpha(opacity=50;)
        cursor: pointer;
    }
    .indexList .indexOn{
        background: #FF8888;
        font-weight: bold;
        color: white;
    }

下面到了重中之重,jQuery部分。其实用原生js就可以实现,只是代码量比较多。我的思路如下:

  1. 定义1个局部变量curIndex代表当前图片,再定义1个全局变量装图片总数。
  2. 给箭头绑定click事件,触发滚动函数changeTo()
  3. 给右下角的index层绑定事件处理函数hover(),当光标移到元素上时触发滚动函数changeTo()。注意要使箭头参数和index层的参数同步一致。
  4. 写滚动函数,此处用到jQuery的动画方法animate()

完整的代码如下:

var curIndex = 0, //当前index
      imgLen = $(".imgList li").length; //图片总数
 $("#prev").click(function(){ 
    //根据curIndex进行上一个图片处理
    curIndex = (curIndex > 0) ? (--curIndex) : (imgLen - 1);
    changeTo(curIndex);
  });
//右箭头点击处理
  $("#next").click(function(){ 
    curIndex = (curIndex < imgLen - 1) ? (++curIndex) : 0;
    changeTo(curIndex);
  });
  //对右下角按钮index进行事件绑定处理等
  $(".indexList").find("li").each(function(item){ 
    $(this).hover(function(){ 
     changeTo(item);
     curIndex = item;
      });
  });
   //调用滚动函数
  function changeTo(num){ 
    var goLeft = num * 400;
    $(".imgList").animate({left: "-" + goLeft + "px"},500);
    $(".infoList").find("li").removeClass("infoOn").eq(num).addClass("infoOn");
    $(".indexList").find("li").removeClass("indexOn").eq(num).addClass("indexOn");
  }

当然除此之外,你还可以插入定时器函数setInterval()来实现图片的自动轮播效果。

                   欢迎各类批评和改进代码

你可能感兴趣的:(学习日志,jQuery)