jQuery实现轮播图

前言

       最近开始尝试着自己写轮播图,知道轮播图的原理,通过js顶死器不断的重复的给要轮播的图片添加和删除样式,在css样式中通过display中的 none 和block 来切换显示的图片,再加上过渡效果即可实现好看的轮播图,我准备用递归函数写,但是却不知道在哪出现了问题,能够实现第一轮的正常轮播,但是后面的轮播却会出现问题,不断的检查问题,还是没有找出问题,最后放弃用递归的写法,再参考别人的代码,成功实现了轮播图功能。

直接放上代码:

  • html部分:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <div class="lunbo">
    <div class="imgs">
    <!-- 两个左右切换的按钮 -->
    <span class="left"><</span>
    <span class="right">></span>
    <!-- 需要轮播的六张图片 -->
    <ul>
    <li class="current"><img src="img/a.jpg" alt=""></li>
    <li><img src="img/b.jpg" alt=""></li>
    <li><img src="img/c.jpg" alt=""></li>
    <li><img src="img/d.jpg" alt=""></li>
    <li><img src="img/e.jpg" alt=""></li>
    <li><img src="img/f.jpg" alt=""></li>
    </ul>
    </div>
    <!-- 图片下面部分可以用来切换图片的圆点 -->
    <ul class="dot">
    <li class="current"></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    </ul>
    </div>

html部分比较简单。

  • css部分
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    *{
    margin: 0;
    padding: 0;
    list-style: none;
    text-decoration: none;
    }
    .lunbo{
    width: 100%;
    height:400px;
    position: relative;
    }
    .lunbo img{
    width: 100%;
    height: 450px;
    position: absolute;
    top: 0px;
    }
    .left{
    position: absolute;
    display: inline-block;
    font-weight: bolder;
    z-index: 99;
    left: 0px;
    width: 50px;
    height: 100px;
    line-height: 100px;
    background: #ccc;;
    top: 135px;
    font-size: 60px;
    text-align: center;
    opacity: 0.3;
    }
    .right{
    position: absolute;
    display: inline-block;
    font-weight: bolder;
    z-index: 99;
    right: 0px;
    width: 50px;
    height: 100px;
    line-height: 100px;
    background: #ccc;;
    top: 135px;
    font-size: 60px;
    text-align: center;
    opacity: 0.3;
    }
    .imgs>ul li{
    /* 先设置所有的图片都不显示 */
    display: none;
    }
    .imgs .current{
    /* 让第一张图片显示 */
    display: block;
    }
    .dot .current{
    /* 通过给小圆点来添加current类来使其变为红点 */
    background:red;
    }
    .dot{
    z-index: 99;
    position: absolute;
    top:300px;
    /* 可以使所有的小圆点整体居中 */
    left: 50%;
    transform: translate(-50%, -50%);
    }
    .dot li{
    /* 小圆点的默认样式 */
    background: white;
    width: 15px;
    height: 15px;
    border-radius:50%;
    display: inline-block;
    margin-right: 20px;
    }
    .dot>li:hover{
    /* 使鼠标经过左右切换的按钮变为一只手 */
    cursor: pointer;
    }

很正常的css样式设置,很多地方还不是特别的熟练,不是完美,代码还有很多可以优化的地方。

  • js部分

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    $(function () {
    var timer = null;
    var cur = 0;
    var len = $(".imgs>ul li").length;
    // 右切换
    $('.right').click(function chr() {
    cur = $('.dot>.current').index();
    if (cur == 5) {
    $(".imgs>ul li").eq(0).fadeIn(400).siblings("li").fadeOut(400);
    $(".dot>li").eq(0).addClass("current").siblings().removeClass("current");
    }
    $(".dot>li").eq(cur + 1).addClass("current").siblings().removeClass("current");
    $(".imgs>ul li").eq(cur + 1).fadeIn(400).siblings("li").fadeOut(400);
    });
    // 左切换
    $('.left').click(function chl() {
    cur = $('.dot>.current').index();
    if (cur == 0) {
    $(".imgs>ul li").eq(5).fadeIn(400).siblings("li").fadeOut(400);
    $(".dot>li").eq(5).addClass("current").siblings().removeClass("current");
    }
    $(".dot>li").eq(cur - 1).addClass("current").siblings().removeClass("current");
    $(".imgs>ul li").eq(cur - 1).fadeIn(400).siblings("li").fadeOut(400);
    });
    //鼠标滑过容器停止播放
    $(".imgs").hover(function () {
    clearInterval(timer);
    }, function () {
    showImg();
    });
    // 遍历所有圆点导航实现划过切换至对应的图片
    $(".dot>li").click(function () {
    clearInterval(timer);
    cur = $(this).index();
    $(this).addClass("current").siblings().removeClass("current");
    $(".imgs>ul li").eq(cur).fadeIn(400).siblings("li").fadeOut(400);
    });
    //定义图片切换函数
    function showImg() {
    timer = setInterval(function () {
    cur++;
    if (cur >= len) {
    cur = 0;
    }
    $(".imgs>ul li").eq(cur).fadeIn(400).siblings("li").fadeOut(400);
    $(".dot>li").eq(cur).addClass("current").siblings().removeClass("current");
    }, 2000);
    }
    showImg();
    });
  • 最后整体思路没有变,但图片的切换就没有通过切换类来实现,而是使用了更加方便的jQuery的fadeIn()方法和fadeOut(),可以直接实现淡入淡出效果。

  • 小圆点切换的实现还是通过切换类的方法
  • 鼠标移到图片上自动停止播放则是通过jQuery的hover方法来实现的,移入的时候清除定时器,移出的时候再次执行切换函数的图片
  • 点击小圆点切换图片这是通过,获取点击的那个小圆点的索引来定向切换图片
  • 左右切换是获取当前小圆点的索引来定位,然后单击切换到下一张图片
    写这个花了很多时间,不过最后还是完成了,也学会了很多其他的东西。

最后是效果图

-------------本文结束感谢您的阅读-------------