jQuery响应式图片无缝轮播插件

当前位置:主页 > jQuery库 > 幻灯片和轮播图 > jQuery响应式图片无缝轮播插件
jQuery响应式图片无缝轮播插件
分享:

    插件介绍

    这是一款简单实用的jQuery响应式图片无缝轮播插件。该插件会将要轮播的图片制作为背景图片,它支持ie8+浏览器,具有无限、无缝轮播等特点。

    浏览器兼容性

    浏览器兼容性
    时间:10-27
    阅读:
简要教程

这是一款简单实用的jQuery响应式图片无缝轮播插件。该插件会将要轮播的图片制作为背景图片,它支持ie8+浏览器,具有无限、无缝轮播等特点。

使用方法

HTML结构

该轮播图插件的基本HTML结构如下:

<div class="banner">
    <ul>
    </ul>
    <ol>
    </ol>
    <i class="left"></i><i class="right"></i>
</div>             
                
CSS样式

使用下面的CSS代码来制作轮播图的全屏响应式效果。

.banner {
  width: 100%;
  position: relative;
  overflow: hidden;
}

.banner ul { position: absolute; }

.banner ul li {
  width: 100%;
  height: 560px;
  float: left;
  background: no-repeat center center;
}                 
                

圆点导航和箭头导航按钮的样式如下:

.banner ol {
  height: 20px;
  background: rgba(0,0,0,0.5);
  position: absolute;
  left: 50%;
  bottom: 30px;
  padding: 0 10px;
  border-radius: 10px;
}

.banner ol li {
  width: 10px;
  height: 10px;
  float: left;
  margin: 5px 5px;
  background: rgba(255,255,255,0.5);
  border-radius: 50%;
  cursor: pointer;
}

.banner ol .current { background: rgba(255,255,255,1); }

.banner i {
  width: 58px;
  height: 120px;
  position: absolute;
  top: 50%;
  margin-top: -60px;
  cursor: pointer;
  border-radius: 5px;
  display: none;
}

.banner .left {
  left: 60px;
  background: url('left_right.png') no-repeat 0 0px;
}

.banner .right {
  right: 60px;
  background: url('left_right.png') no-repeat 0px -120px;
}

.banner .left:hover, .banner .right:hover { background-color: rgba(0, 0, 0, 0.31); }              
                
JavaScript

在页面中引入jquery,实现该轮播图效果的jquery代码如下:

$(function(){ //页面加载完毕才执行

    //=========设置参数==========
    //图片统一高度:
    var images_height = '560px';
    //图片路径/链接(数组形式):
    var images_url = [
        'img/1.jpg',
        'img/2.jpg',
        'img/3.jpg'
    ];
    var images_count = images_url.length;
    //console.log(images_count);

    //创建节点
    //图片列表节点
    for(var j=0;j<images_count+1;j++){
        $('.banner ul').append('<li></li>')
    }
    //轮播圆点按钮节点
    for(var j=0;j<images_count;j++){
        if(j==0){
            $('.banner ol').append('<li class="current"></li>')
        }else{
            $('.banner ol').append('<li></li>')
        }
    }

    //载入图片
    $('.banner ul li').css('background-image','url('+images_url[0]+')');
    $.each(images_url,function(key,value){
        $('.banner ul li').eq(key).css('background-image','url('+value+')');
    });

    $('.banner').css('height',images_height);

    $('.banner ul').css('width',(images_count+1)*100+'%');

    $('.banner ol').css('width',images_count*20+'px');
    $('.banner ol').css('margin-left',-images_count*20*0.5-10+'px');

    //=========================

    var num = 0;
    //获取窗口宽度
    var window_width = $(window).width();
    $(window).resize(function(){
        window_width = $(window).width();
        $('.banner ul li').css({width:window_width});
        clearInterval(timer);
        nextPlay();
        timer = setInterval(nextPlay,2000);
    });
    //console.log(window_width);
    $('.banner ul li').width(window_width);
    //轮播圆点
    $('.banner ol li').mouseover(function(){//用hover的话会有两个事件(鼠标进入和离开)
        $(this).addClass('current').siblings().removeClass('current');
        //第一张图: 0 * window_width
        //第二张图: 1 * window_width
        //第三张图: 2 * window_width
        //获取当前编号
        var i = $(this).index();
        //console.log(i);
        $('.banner ul').stop().animate({left:-i*window_width},500);
        num = i;
    });
    //自动播放
    var timer = null;
    function prevPlay(){
        num--;
        if(num<0){
            //悄悄把图片跳到最后一张图(复制页,与第一张图相同),然后做出图片播放动画,left参数是定位而不是移动的长度
            $('.banner ul').css({left:-window_width*images_count}).stop().animate({left:-window_width*(images_count-1)},500);
            num=images_count-1;
        }else{
            //console.log(num);
            $('.banner ul').stop().animate({left:-num*window_width},500);
        }
        if(num==images_count-1){
            $('.banner ol li').eq(images_count-1).addClass('current').siblings().removeClass('current');
        }else{
            $('.banner ol li').eq(num).addClass('current').siblings().removeClass('current');

        }
    }
    function nextPlay(){
        num++;
        if(num>images_count){
            //播放到最后一张(复制页)后,悄悄地把图片跳到第一张,因为和第一张相同,所以难以发觉,
            $('.banner ul').css({left:0}).stop().animate({left:-window_width},500);
            //css({left:0})是直接悄悄改变位置,animate({left:-window_width},500)是做出移动动画
            //随后要把指针指向第二张图片,表示已经播放至第二张了。
            num=1;
        }else{
            //在最后面加入一张和第一张相同的图片,如果播放到最后一张,继续往下播,悄悄回到第一张(肉眼看不见),从第一张播放到第二张
            //console.log(num);
            $('.banner ul').stop().animate({left:-num*window_width},500);
        }
        if(num==images_count){
            $('.banner ol li').eq(0).addClass('current').siblings().removeClass('current');
        }else{
            $('.banner ol li').eq(num).addClass('current').siblings().removeClass('current');

        }
    }
    timer = setInterval(nextPlay,2000);
    //鼠标经过banner,停止定时器,离开则继续播放
    $('.banner').mouseenter(function(){
        clearInterval(timer);
        //左右箭头显示(淡入)
        $('.banner i').fadeIn();
    }).mouseleave(function(){
        timer = setInterval(nextPlay,2000);
        //左右箭头隐藏(淡出)
        $('.banner i').fadeOut();
    });
    //播放下一张
    $('.banner .right').click(function(){
        nextPlay();
    });
    //返回上一张
    $('.banner .left').click(function(){
        prevPlay();
    });
});
                

该jQuery响应式图片无缝轮播插件的github地址为:https://github.com/maizhenying09/jquery-seamless-picture-carousel