天天看點

使用jQuery實作無縫輪播圖

輪播圖我們很常見的功能,可以使用原生的js進行實作,也可以使用jQuery進行實作,還可以使用H5C3進行實作,當然也可以使用swiper插件很友善的實作,這裡先用jQuery實作一個無縫的輪播。

思路:

1、首先擷取要操作的對象

2、設定滑鼠移入移出時顯示和隐藏左右按鈕

3、給左右按鈕添加點選事件,讓ul移動一個圖檔的寬度

4、給對應的小按鈕設定點選事件,已經添加背景色

5、添加一個定時器讓圖檔循環移動

<!DOCTYPE html>
<html>
<head >
    <meta charset="UTF-8">
    <title></title>
    <style>
        body,ul,ol,li,img {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        #box {
            width: 700px;
            height: 400px;
            /*padding: 5px;*/
            /*background-color: red;*/
            border: 1px solid #ccc;
            margin: 100px auto;
            position: relative;
            overflow: hidden;
        }
        .ad {
            width: 700px;
            height: 400px;
            position: relative;
        }
        #box img {
            width: 700px;
            height: 400px;
        }
        .ad ul li{
            width: 700px;
            height: 400px;
            overflow: hidden;
            float: left;
        }
        .ad ul {
            position: absolute;
            left: 0;
            top: 0;
            width: 4200px;
        }
        .ad ol {
            position: absolute;
            right: 10px;
            bottom: 10px;
            line-height: 20px;
            text-align: center;
        }
        .ad ol li {
            width: 20px;
            height: 20px;
            float: left;
            background: #fff;
            border: 1px solid #ccc;
            margin-left: 10px;
            cursor: pointer;
        }
        .ad ol li.current {
            background: yellow;
        }
        .ad ul li.current {
            background: yellow;
        }
        #arr {
            display: none;
        }
        #arr span {
            width: 40px;
            height: 40px;
            line-height: 40px;
            position: absolute;
            /*left: 5px;*/
            top: 50%;
            margin-top: -20px;
            background-color: #000;
            cursor: pointer;
            text-align: center;
            font-weight: bold;
            font-family: '黑體';
            font-size: 30px;
            color: #fff;
            opacity: 0.3;
            border: 1px solid #fff;
        }
        #arr #left{
            left: 5px;
        }
        #arr #right {
            right: 5px;
            /*left: auto;*/
        }
    </style>
</head>
<body>
<div id="box" class="all">
    <div class="ad">
        <ul id="imgs">
            <li><img src="imgs/1.jpg" alt=""/></li>
            <li><img src="imgs/2.jpg" alt=""/></li>
            <li><img src="imgs/3.jpg" alt=""/></li>
            <li><img src="imgs/4.jpg" alt=""/></li>
            <li><img src="imgs/5.jpg" alt=""/></li>
            <li><img src="imgs/1.jpg" alt=""/></li>
        </ul>
        <ol>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ol>
    </div>
    <div id="arr"><span id="left"><</span><span id="right">></span></div>
</div>
<script src="jquery-1.12.2.js"></script>
<script>
    $(function () {
        //擷取小按鈕
        var $oLi = $("ol>li");
        //擷取圖檔的寬度
        var imgW = $("#imgs > li").width();

        //滑鼠移入盒子顯示左右按鈕
        $("#box").on("mouseenter", function () {
            $("#arr").css("display", "block");
        });
        //滑鼠移出盒子隐藏左右按鈕
        $("#box").on("mouseleave", function () {
            $("#arr").css("display", "none");
        });

        //預設第一個小按鈕是活動
        $($oLi[0]).addClass("current");

        //給左按鈕注冊點選事件
        $("#left").click(function () {
            //判斷小按鈕中哪個按鈕是活動的
            var num;
            $oLi.each(function () {
                //将ul向右移動
                if($(this).hasClass("current")) {
                    num = $(this).index() - 1;
                    //當達到最左邊時,移動到最右邊
                    if(num < 0) {
                        num = 4;
                    }
                    $("#imgs").animate({
                        left: -num * imgW + "px"
                    }, 300);
                }
            });
            //小按鈕的背景色相應的改變
            $($oLi[num]).addClass("current").siblings().removeClass("current");
        });
        //給右按鈕注冊點選事件
        $("#right").click(function () {
            //判斷小按鈕中哪個按鈕是活動的
            var num;
            $oLi.each(function () {
                //将ul向右移動
                if($(this).hasClass("current")) {
                    num = $(this).index() + 1;
                    //當達到最左邊時,移動到最右邊
                    if(num > 5) {
                        num = 1;
                    }
                    $("#imgs").animate({
                        left: -num * imgW + "px"
                    }, 300);
                }
            });
            //小按鈕的背景色相應的改變
            $($oLi[num]).addClass("current").siblings().removeClass("current");
        });

        //點選小按鈕,圖檔移動,并給小按鈕設定背景顔色
        $oLi.on("click", function () {
            //将活動的小按鈕添加一個類
            $(this).addClass("current").siblings().removeClass("current");
            //擷取索引
            var num = $(this).index();
            $("#imgs").animate({
                left: -num * imgW + "px"
            }, 300);
        });

        //循環播放
        var timeId = setInterval(function () {
            //判斷小按鈕中哪個按鈕是活動的
            var num;
            $oLi.each(function () {
                //将ul向右移動
                if($(this).hasClass("current")) {
                    //得到活動的索引,然後加1
                    num = $(this).index() + 1;
                    //讓圖檔移動
                    $("#imgs").animate({
                        left: -num * imgW + "px"
                    }, 300);
                    //到達最後一張,讓ul從頭開始
                    if(num== $oLi.length) {
                        $("#imgs").animate({
                            left: "0px"
                        }, 0);
                        num = 0;
                    }
                }
            });
            //小按鈕的背景色相應的改變
            $($oLi[num]).addClass("current").siblings().removeClass("current");
        }, 2000);
    })
</script>
</body>
</html>
           

demo下載下傳位址 jQuery實作無縫輪播