HTML+CSS+JQ实现轮播图

 运用HTML+CSS+JQ实现轮播图,这里的轮播图的轮播方式是自动每隔一段时间向左移动一张图,循环滚动(还有变换透明度来实现轮播的),左右箭头按钮也可以切换图片,并且也可以点击小圆点切换图片。

轮播图效果展示:

完整代码如下:

1.index.html

设置图片展示的div,还有小圆点div,设置默认第一个小圆点显示,小圆点的背景变色原理是给小圆点添加一个类名,当轮到这张图片时添加类名,其他的小圆点不添加类名。图片显示原理是:设置图片默认为隐藏或none,当轮到这个图片显示是则开放这个图片的显示,其他的图片为隐藏。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>轮播图</title>
    <link rel="stylesheet" href="css/banner.css">
    <script src="js/jquery-1.12.4.min.js"></script>
    <script src="js/banner.js"></script>
    <link rel="stylesheet" href="http://at.alicdn.com/t/font_1903309_36ckhpth40m.css">
</head>
<body>
    <div class="banner">
        <ul class="ul_list">
            <li><img src="img/1.jpg" alt=""></li>
            <li><img src="img/2.jpg" alt=""></li>
            <li><img src="img/3.jpg" alt=""></li>
            <li><img src="img/4.jpg" alt=""></li>
            <li><img src="img/5.jpg" alt=""></li>
        </ul>
        <div class="num">
            <span class="on"></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </div>
        <a href="javascript:;" class="prev"><i class="iconfont icon-qiehuanqizuo"></i></a>
        <a href="javascript:;" class="next"><i class="iconfont icon-qiehuanqiyou"></i></a>
    </div>
</body>
</html>

2.banner.css

*{
    margin: 0;
    padding: 0;
}
a{
    text-decoration: none;
}
.banner{
    overflow: hidden;
    width: 790px;
    height: 340px;
    margin: 100px auto;
    position: relative;
}
.banner ul{
    width: 3950px;/*5张图片的宽度,也可以写成500%*/
    height: 340px;
    position: absolute;
}
.banner li{
    list-style-type: none;
    float: left;
    width: 790px;
    height: 340px;
}
/*如果图片大小有问题*/
/*.banner img{
    width: 100%;
    height: 100%;
}*/
.banner .num{
    width: 100%;
    height: 20px;
    font-size: 0px;
    position: absolute;
    left: 0;
    bottom: 10px;
    text-align: center;
}
.banner .num span{
    display: inline-block;
    width: 15px;
    height: 15px;
    margin: 0 8px;
    background-color: #fff;
    border-radius: 50%;
    cursor: pointer;
    transition: all .3s;
}
/*向左向右箭头*/
.banner .prev{
    display: block;
    width: 40px;
    height: 74px;
    background-color: rgba(0,0,0,0.2);
    color: rgba(255,255,255,0.4);
    position: absolute;
    top: 50%;
    margin-top: -37px;
    left: 0;
    text-align: center;
    transition: background-color .3s;
}
.banner .next{
    display: block;
    width: 40px;
    height: 74px;
    background-color: rgba(0,0,0,0.2);
    color: rgba(255,255,255,0.4);
    position: absolute;
    top: 50%;
    margin-top: -37px;
    right: 0;
    text-align: center;
    transition: background-color .3s;
}
.banner .prev i,
.banner .next i{
    font-size: 30px;
    line-height: 74px;
    transition: background-color .3s;
}
.banner .prev:hover,
.banner .next:hover{
    background-color: rgba(0,0,0,0.5);
    color: #fff;
}
.banner .num span:hover{
    background-color: #ccc;
}
.banner .num span.on{
    width: 30px;
    height: 15px;
}

3.banner.js

设置轮播图动画效果,封装play函数,利用定时器自动向左播放下一张,切换图片。

/*轮播图js*/
/*封装play函数,利用定时器自动向左播放下一张*/
$(function () {
    var timer = null;
    var liW = $(".banner ul li:first").innerWidth();//求一个li的宽度
    var n = 0;//用来管理给第几个span添加类.on
    timer = setInterval(function () {
        /*
            1.先将ul向左移动一个li的宽度,再将第一个li带出去
            2.在执行完1后(形成一个动画队列),将ul的left回归到0,再将带出去的li追加回ul的最后
        */
        play();
    },2000)
    function play() {
        $(".banner ul").animate({left: -liW},function () {/*回调函数*/
            $(this).css("left",0).find("li:first").appendTo(this);
        })
        n++;
        if(n>4){/*if(n>$(".banner ul li").length)-1*/   /*$(".banner ul li").length)表示li的个数*/
            n = 0;
        }
        $(".banner .num span").eq(n).addClass("on").siblings().removeClass("on");
    }
    /*当鼠标移动到轮播图区域,轮播暂停*/
    $(".banner").hover(function () {
        clearInterval(timer);
    },function () {
        timer = setInterval(function () {
            play();
        },2000)
    })
    /*点击next向右箭头*/
    $(".next").click(function () {
        play();
    })
    /*点击prev向左箭头*/
    $(".prev").click(function () {
        /*
            看当前显示的图片前面的
            1.先把ul往左移出一个li的宽度,同时,将最后一个li追加到ul最前头
            2.执行动画:ul的left变为0,将最后一个li带回
        */
        /*$(".banner ul").css("left",-liW).find("li:last").prependTo(this);*//*此处不能用this,当前this指的是prev按钮*/
        $(".banner ul").css("left",-liW).find("li:last").prependTo(".banner ul");
        $(".banner ul").animate({left:0})
        /*解决点击prev时,span跟着一起变化*/
        n--;
        if(n<0){
            n = 4;/*n = $(".banner ul li").length)-1*/
        }
        $(".banner .num span").eq(n).addClass("on").siblings().removeClass("on");
    })
    /*点击span进行切换
       当前轮播到第几张,放在n中存储,当点击span时,会得到span的index值
       1.判断得到的index值是大于n还是小于n
       如果小于n:通过for循环执行n到index的次数(不包括index,++)的向左循环切换效果
       如果大于n:通过for循环执行n到index的次数(不包括index,--)的向右循环切换效果
       2.将index赋值给n,进行span的切换
    */
    $(".banner .num span").each(function (index) {/*用each遍历*/
        $(this).click(function () {
            if(n < index){
                for(var i = n;i<index;i++){
                    $(".banner ul").animate({left: -liW},100,function () {/*回调函数*/
                        $(this).css("left",0).find("li:first").appendTo(this);
                    })
                }
            }else if(n>index){
                for(var i = n;i>index;i--){
                    $(".banner ul").css("left",-liW).find("li:last").prependTo(".banner ul");
                    $(".banner ul").animate({left:0},100);
                }
            }
            n = index;
            $(".banner .num span").eq(n).addClass("on").siblings().removeClass("on");
        })

    })

})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值