web的幾種輪播


我們在開發當中經常用到輪播。我在這里總結了一下幾種,僅供參考:

第一種:

  1、jQuery:用display :none/block控制的一種輪播;

// CSS部分
#igs {
    margin: 30px auto;
    width: 1200px;
    height: 460px;
    position: relative;
}
         
.ig {
    position: absolute;
}
         
#tabs {
    position: absolute;
    list-style: none;
    background-color: rgba(255,255,255,.5);
    left: 500px;
    bottom: 10px;
    border-radius: 10px;
    padding: 5px 0 5px 5px;
}
         
.tab{
    float: left;
    text-align: center;
    line-height: 20px;
    width: 20px;
    height: 20px;
    cursor: pointer;
    overflow: hidden;
    margin-right: 4px;
    border-radius: 100%;
    background-color: rgb(200,100,150);
}
        
.tab.active{
    background-color: red;
    color: #fff;
}

.btn{
    position: absolute;
    top: 200px;
    width: 40px;
    color: #fff;
    height: 100px;
    background-color: rgba(255,255,255,.3);
    font-size: 40px;
    font-weight: bold;
    text-align: center;
    line-height: 100px;
    border-radius: 5px;
    margin: 0 5px;
}
         
.btn2{
    position: absolute;
    right: 0px;
}
         
.btn:hover{
    background-color: rgba(0,0,0,.7);
}

// HTML部分
        <div id="igs">
              <a class="ig" href="#">1<img src="images/slider-1.jpg"/></a>
              <a class="ig" href="#">2<img src="images/slider-2.jpg"/></a>
              <a class="ig" href="#">3<img src="images/slider-3.jpg"/></a>
              <a class="ig" href="#">4<img src="images/slider-4.jpg"/></a>
              <a class="ig" href="#">5<img src="images/slider-5.jpg"/></a>
              <div class="btn btn1"><</div>
              <div class="btn btn2">></div>
              <ul id="tabs">
                  <li class="tab active">1</li>
                  <li class="tab">2</li>
                  <li class="tab">3</li>
                  <li class="tab">4</li>
                  <li class="tab">5</li>
              </ul>
        </div>

// JavaScript部分
            //定義全局變量和定時器
            var i = 0 ;
            var timer;
             
            $(function(){
                  //用jquery方法設置第一張圖片顯示,其余隱藏
           // $("#igs a:not(:first-child)").hide();這樣操作的話可以把a鏈接里面的class取消掉 $('.ig').eq(0).show().siblings('.ig').hide(); //調用showTime()函數(輪播函數) showTime(); //當鼠標經過下面的數字時,觸發兩個事件(鼠標懸停和鼠標離開) $('.tab').hover(function(){ //首先清除時間函數 clearInterval(timer); //獲取當前i的值,調用輪播函數 i = $(this).index(); Show(); },function(){ //鼠標離開時開啟時間函數 showTime(); }); //鼠標點擊左側的箭頭 $('.btn1').click(function(){ clearInterval(timer);
            i--; if(i == 0){ //注意此時i的值 i = $('.ig').length; } Show(); showTime(); }); //鼠標點擊右側的箭頭 $('.btn2').click(function(){ clearInterval(timer);
            i++; if(i == $('.ig').length - 1){ //當圖片是最后一張時,點擊右箭頭, i = -1; } Show(); showTime(); }); }); //創建一個showTime函數 function showTime(){ //設置定時器 timer = setInterval(function(){ //調用一個Show()函數 Show(); i++; //當圖片是最后一張的后面時,設置圖片為第一張 if(i == 5){ i = 0; } },2000); } //創建一個Show函數 function Show(){ //在這里可以用其他jquery的動畫 $('.ig').eq(i).fadeIn(300).siblings('.ig').fadeOut(300); //給.tab創建一個新的Class為其添加一個新的樣式,並且要在css代碼中設置該樣式 $('.tab').eq(i).addClass('active').siblings('.tab').removeClass('active'); }

   2、Javascript:用display :none/block控制的一種輪播;

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style>
    .container{
        width:1130px;
        height:500px;
        margin:0 auto;
        position:relative;
    }
    .inner{
        width:1130px;
        height:500px;
    }
    .inner-img{
        width:1130px;
        height:500px;
        display: none;
        position:absolute;
        top:0;
        left:0;
        z-index:1;
    }
    .inner-img.active{
        display: block;
    }
    .leftBtn,.rightBtn{
        position:absolute;
        width:40px;
        height:60px;
        background:rgba(0,0,0,0.3);
        font-size: 30px;
        color:#fff;
        text-align: center;
        line-height: 60px;
        cursor:pointer;
        z-index: 11;
        display:none;
    }
    .leftBtn{
        left:5px;
        top:200px;
    }
    .rightBtn{
        right:5px;
        top:200px;
    }
    .container ul{
        position:absolute;
        left:520px;
        bottom:10px;
        z-index: 11;
        list-style: none;
        width:100px;
        height:20px;
    }
    .container ul .page{
        float:left;
        width:18px;
        height:18px;
        border-radius:18px;
        background: black;
        margin-right: 6px;
        color: #fff;
        font-size: 12px;
        text-align: center;
        line-height: 18px;
        cursor: pointer;
    }
    .container ul .page.active{
        background-color: red;
    }
    </style>
</head>
<body>
    <div class="container">
        <div class="inner">
            <a href="#" class="inner-img active"><img src="images/TB1.Ez0IVXXXXcbXFXXz1yY.pXX-1130-500.jpg_q100.jpg" alt=""></a>
            <a href="#" class="inner-img"><img src="images/TB1dpJtJFXXXXXsXFXXz1yY.pXX-1130-500.jpg_q100.jpg" alt=""></a>
            <a href="#" class="inner-img"><img src="images/TB14aRbJFXXXXagXVXXXXXXXXXX-1130-500.jpg_q100.jpg" alt=""></a>
            <a href="#" class="inner-img"><img src="images/TB15AHZIVXXXXX7XFXXSutbFXXX.jpg_q100.jpg" alt=""></a>
        </div>
        <div class="leftBtn">&lt;</div>
        <div class="rightBtn">&gt;</div>
        <ul>
            <li class="page active">1</li>
            <li class="page">2</li>
            <li class="page">3</li>
            <li class="page">4</li>
        </ul>
    </div>
    <script>
    var container = document.getElementsByClassName('container')[0],
    // 獲取所有包含圖片的鏈接
        innerImg = document.getElementsByClassName('inner-img'),
    // 獲取左右按鈕
        btnL = document.getElementsByClassName('leftBtn')[0],
        btnR = document.getElementsByClassName('rightBtn')[0],
        // 獲取分頁器
        page = document.getElementsByClassName('page'),
        // 聲明變量
        num = 0;
    // 聲明時間控制函數
    var timer = setInterval(moveR, 1000);
    // 圖片向右輪播
    function moveR() {
        // 變量每1000毫秒遞增一次,圖片向右輪播
        num++;
        // 如果是最后一張圖片的時候從0開始顯示
        if (num == innerImg.length) {
            num = 0;
        }
        move();
    };

    // 圖片向左輪播
    function moveL() {
        // 每調用一次moveL(),變量遞減一次
        num--;
        // 如果是第一張圖片,則從最后一張圖片開始顯示
        if (num == -1) {
            num = innerImg.length - 1;
        };
        move();
    }
  
   // 圖片切換
   function move(){
     // 把所有的innerImg隱藏和page背景全部變成黑色
        for (var i = 0; i < innerImg.length; i++) {
            innerImg[i].style.display = 'none';
            page[i].style.background = 'black';
        }
        // 把當前num下標的innerImg顯示和page背景變成red
        innerImg[num].style.display = 'block';
        page[num].style.background = 'red';
   }
// 分頁器鼠標滑過時圖片切換 for (var i = 0; i < page.length; i++) { // 用來保存下標,page[i].index == 0 / 1 / 2 / 3 page[i].index = i; // console.log(page[i].index); // 因為已經保存好的下邊,這里的page[i], page[0], page[1], page[2], page[3] page[i].onmouseover = function() { for (var j = 0; j < page.length; j++) { page[j].style.background = 'black'; innerImg[j].style.display = 'none'; } this.style.background = 'red';
       // console.log(this.index);可以查看是多少 innerImg[
this.index].style.display = 'block'; num = this.index; } } btnL.onclick = function() { moveR(); } btnR.onclick = function() { moveL(); } // 鼠標划上container時讓左右按鈕顯示 container.onmouseover = function() { // 清除時間函數 clearInterval(timer); btnR.style.display = 'block'; btnL.style.display = 'block'; } // 鼠標離開container時讓左右按鈕隱藏 container.onmouseout = function() { // 開啟時間函數 timer = setInterval(moveR, 3000); btnR.style.display = 'none'; btnL.style.display = 'none'; } </script> </body> </html>

 

第二種:

  1、用jQuery實現的跑馬燈效果;

  HTML:

    <div class="container">
        <div class="inner-img">
            <div class="img"><img src="img/1.jpg" height="100%" width="100%" alt="" /></div>
            <div class="img"><img src="img/2.jpg" height="100%" width="100%" alt="" /></div>
            <div class="img"><img src="img/3.jpg" height="100%" width="100%" alt="" /></div>
            <div class="img"><img src="img/4.jpg" height="100%" width="100%" alt="" /></div>
            <div class="img"><img src="img/5.jpg" height="100%" width="100%" alt="" /></div>
            <div class="img"><img src="img/6.jpg" height="100%" width="100%" alt="" /></div>
        </div>
        <div class="btn-left">&lt;</div>
        <div class="btn-right">&gt;</div>
    </div>

  CSS:

.container{
    width: 1000px;
    height: 300px;
    border: 1px solid #666;
    margin: 100px auto;
    position: relative;
    overflow: hidden;
}
.inner-img{
    /*如果顯示是五張圖片,這里必須要等於 + 一張圖片的width*/
    width: 1200px;
    height: 300px;
    background-color: #ccc;
    position: absolute;
    left: 0;
    top: 0;
}
.img{
    width: 200px;
    height: 100%;
    float: left;
    font-size: 50px;
    text-align: center;
    line-height: 300px;
    padding: 20px;
    box-sizing: border-box;
    /*overflow: hidden;*/
}
.btn-left,.btn-right{
    width: 30px;
    height: 60px;
    color: #fff;
    background: #000;
    font-size: 30px;
    text-align: center;
    line-height: 60px;
    opacity: 0.5;
    display: none;
}
.btn-left{
    position:absolute;
    left: 0px;
    top: 120px;
}
.btn-right{
    position:absolute;
    right: 0px;
    top: 120px;
}

  JavaScript:

// 可以把整個代碼封裝成一個函數,后期可以傳參,用來控制一次可以切換幾張圖片
$(document).ready(function() {
    // 獲取包含圖片的盒子的寬度
    var imgW = $(".img").outerWidth();
    // 指定計時器
    var t = setInterval(moveL, 2000);

    function moveL() {
        /*
         *.stop():停止當前正在運行的動畫,表示兩個參數都是false;
         *.stop(true,true):停止被選元素的所有加入隊列的動畫,但允許完成當前動畫。
         */
        $(".inner-img").stop(true, true);
        /*
         *1、首先將inner-img的left: 0轉換為left:-200px
         *2、將inner-img的第一個子元素appendTo()到inner-img里面
         *3、再次設置inner-img的left:-200px;
         */
        $(".inner-img").animate({
            left: -imgW
        }, function() {
            // 講已經切換到-200px的第一張圖片appendTo到父元素里面,這也是跑馬燈效果的秘訣
            $(".inner-img > .img").first().appendTo($(".inner-img"));
            $(".inner-img").css({
                left: 0
            });
        })
    };
    // 向右的輪播
    function moveR() {
        $(".inner-img").stop(true, true);
        $(".inner-img").css({
            left: -imgW
        });
        $(".inner-img > .img").last().prependTo($(".inner-img"));
        $(".inner-img").animate({
            left: 0
        });
    };
    // 鼠標滑上,滑下效果
    $(".container").hover(function() {
        // 當鼠標滑過父容器時清除時間函數
        clearInterval(t);
        // 並且將左右按鈕顯示出來
        $(".btn-left").add(".btn-right").fadeIn(50);
    }, function() {
        // 當鼠標滑過父容器時開啟時間函數
        t = setInterval(moveL, 2000);
        // 並且將左右按鈕隱藏
        $(".btn-left").add(".btn-right").fadeOut(50);
    });
    // 點擊左邊的按鈕向右切換圖片
    $(".btn-left").click(function() {
        moveR();
    });
    // 點擊右邊的按鈕向左切換圖片
    $(".btn-right").click(function() {
        moveL();
    })
});

 

  2、用JavaScript實現的跑馬燈效果;

第三種:

  1、用jQuery實現的無縫輪播

   HTML:

        <div class="banner">
            <ul class="img">
                <li><a href=""><img src="img/1.jpg" alt="" /></a></li>
                <li><a href=""><img src="img/2.jpg" alt="" /></a></li>
                <li><a href=""><img src="img/3.jpg" alt="" /></a></li>
                <li><a href=""><img src="img/4.jpg" alt="" /></a></li>
                <li><a href=""><img src="img/5.jpg" alt="" /></a></li>
            </ul>
            <ul class="page"></ul>
            <div class="btn btn_l">&lt;</div>
            <div class="btn btn_r">&gt;</div>
        </div>

  CSS:  

* {
    padding: 0px;
    margin: 0px;
    list-style: none;
    font-family: "微軟雅黑";
}

.banner {
    width: 740px;
    height: 350px;
    margin: 100px auto;
    border: 1px solid #808080;
    position: relative;
    overflow: hidden;
}

.banner .img {
    width: 5000px;
    position: absolute;
    left: 0px;
    top: 0px;
}

.banner .img li {
    width: 740px;
    height: 350px;
}

.banner .img li a {
    display: block;
    width: 100%;
    height: 100%;
}

.banner .img li {
    float: left;
}

.banner .page {
    position: absolute;
    width: 100%;
    bottom: 10px;
    left: 0px;
    text-align: center;
    font-size: 0px;
}

.banner .page li {
    width: 20px;
    height: 20px;
    background-color: #888;
    border-radius: 50%;
    display: inline-block;
    margin: 0px 3px;
    cursor: pointer;
    color: #fff;
}

.banner .page li.active {
    background-color: #ff6a00;
}

.banner .btn {
    width: 30px;
    height: 50px;
    background-color: #808080;
    opacity: 0.5;
    filter: alpha(opacity:0.5);
    position: absolute;
    top: 50%;
    margin-top: -25px;
    cursor: pointer;
    text-align: center;
    line-height: 50px;
    font-size: 40px;
    color: #fff;
    display: none;
}

.banner .btn_l {
    left: 0px;
}

.banner .btn_r {
    right: 0px;
}

.banner:hover .btn {
    display: block;
}

  JavaScript:

            $(function() {
                //聲明當前圖片的索引值
                var num = 0;
                //克隆第一張圖片
                var clone = $('.img li').first().clone();
                //獲取圖片的寬度
                var imgW = $('.img li').first().width();
                //將第一張圖片插入到img容器里面里面
                $('.banner .img').append(clone);
                //獲取插入之后li的個數
                var size = $('.img li').size();
                //動態的根據圖片數量創建分頁器並且插入到num里面
                for(var i = 0; i < size - 1; i++) {
                    $('.page').append('<li></li>');
                }
                //給創建的分頁器的第一個添加active的類
                $('.page li').first().addClass('active');
                //創建一個時間函數用來控制圖片切換的方式
                var timer = setInterval(function() {
                    num++;
                    move();
                }, 1000);

                //move函數
                function move() {
                    if(num == size) {
                        //當運動到最后一張圖片時,重置整個img到left:0的位置
                        $('.banner .img').css({
                            left: 0
                        });
                        num = 1;
                    }

                    //點擊右邊按鈕時
                    if(num == -1) {
                        $('.img').css({
                            left: -(size - 1) * imgW
                        })
                        num = size - 2;
                    }

                    //隨着num的遞增,img容器以animate的方式向左移動-imgW * num的距離
                    $('.banner .img').stop().animate({
                        left: -imgW * num
                    }, 500);

                    //當num等於圖片數量時,選取第一個分頁器設置樣式,否則,等於當前按照num設置分頁器的樣式。
                    if(num == size - 1) {
                        $('.page li').eq(0).addClass('active').siblings().removeClass('active');
                    } else {
                        $('.page li').eq(num).addClass('active').siblings().removeClass('active');
                    }
                };
                
                //點擊分頁器
                $('.page li').click(function(){
                    //獲取到當前分頁器的下標並且賦值給當前圖片的下標
                    num = $(this).index();
                    move();
                })
                
                //點擊右按鈕時向右切換圖片
                $('.btn_r').click(function() {
                    num--;
                    move();
                })

                //點擊左邊按鈕時切換圖片
                $('.btn_l').click(function() {
                    num++;
                    move();
                })

                //鼠標滑過banner容器時
                $('.banner').hover(function() {
                    //首先清除時間函數
                    clearInterval(timer);
                }, function() {
                    //鼠標離開時調用時間函數
                    timer = setInterval(function() {
                        num++;
                        move();
                    }, 1000)
                })
            })

 

  2、用js實現的無縫輪播

  HTML:

        <div class="win">
            <a href="javascript:;"><img src="img/1.jpg" title=""></a>
            <a href="javascript:;"><img src="img/2.jpg" title=""></a>
            <a href="javascript:;"><img src="img/3.jpg" title=""></a>
            <a href="javascript:;"><img src="img/4.jpg" title=""></a>
            <a href="javascript:;"><img src="img/5.jpg" title=""></a>
            <div class="btn">
                <div class="btnL">&lt;</div>
                <div class="btnR">&gt;</div>
            </div>
            <ul class="circle">
                <li class="active"></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>

  css:

.win{
    height: 350px;
    width: 740px;
    margin: 20px auto;
    position: relative;
     overflow: hidden; 
}
.win a{
    position: absolute;
    top: 0;
    left: 0;
}
.btn{
    width: 740px;
    height: 70px;
    font-size: 30px;
    line-height: 70px;
    text-align: center;
    position: absolute;
    left: 0;
    top: 50%;
    margin-top: -35px;
}
.btn .btnL, .btn .btnR{
    width: 35px;
    height: 70px;
    font-size: 30px;
    line-height: 70px;
    text-align: center;
    color: #fff;
    float: left;
    background: black;
    opacity: 0.5;
    filter:alpha(opacity:50);
    cursor: pointer;
}
.btn .btnL{
    float: left;
}
.btn .btnR{
    float: right;
}  
.circle{
    height: 15px;
    width: 90px;
    margin-left: 5px;
    float: left;
    position: absolute;
    left: 50%;
    margin-left: -33px;
    bottom: 10px;
    z-index: 12;
}
.circle li{ 
    height: 15px;
    width: 15px;
    background: #ccc;
    opacity: 0.5;
    filter:aplha(opacity:50);
    border-radius: 50%;
    margin-left: 3px;
    float: left;
}
.circle li.active{
    background: #e40077;
}

  JavaScript:

        <script type="text/javascript">
            window.onload = function(){
                // 最大的容器
                var win = document.getElementsByClassName('win')[0];
                // 包含圖片的a鏈接
                var as = win.getElementsByTagName('a');
                // 分頁器
                var lis = document.getElementsByClassName('circle')[0].getElementsByTagName('li');
                //獲取圖片的尺寸
                var widths = parseInt(as[0].clientWidth);
                // 左右的按鈕
                var btnL = win.getElementsByClassName('btnL')[0];
                var btnR = win.getElementsByClassName('btnR')[0];
                //定義雙下標
                var num = 0;
                var next = 0;
                // 設定開關,如果當前動畫沒有完成,則停止操作到當前動畫完成
                var flag = true;

                // 首先初始化所有圖片的位置,但是將第一張圖片就位到left:0的位置
                for (var i = 0; i < as.length; i++) {
                    // 跳過本次循環
                    if (i == 0) {
                        continue;
                    };
                    as[i].style.left = widths + 'px';
                };

                // 設定時間函數,每隔兩秒動畫一次
                var timer = setInterval(moveL, 2000);

                // 向左切換的函數
                function moveL(){
                    next++;
                    // 如果是最后一張圖片,從第一張圖片開始
                    if(next == as.length){
                        next = 0;
                    }
                    // 讓下一張圖片到右邊就為准備
                    as[next].style.left = widths + 'px';
                    // 將當前分頁器的樣式取消,加給下一張圖片
                    lis[num].className = '';
                    lis[next].className = 'active';
                    //動畫:讓當前的圖片到左邊去
                    animate(as[num], {
                        left: -widths
                    });
                    // //動畫:下一張圖片放到當前的位置
                    animate(as[next], {
                        left: 0 
                    }, function(){
                        flag = true;
                    })
                    // 更新下標
                    num = next;
                }

                // 想左切換的函數
                function moveR(){
                    next--;
                    // 如果是第一張圖片,從最后一張圖片開始。
                    if(next == -1){
                        next = as.length - 1;
                    }
                    // 讓下一張圖片到左邊定位邊就為准備
                    as[next].style.left = -widths + 'px';
                    lis[num].className = '';
                    lis[next].className = 'active';
                    // 動畫:讓當前的圖片到右邊去
                    animate(as[num], {
                        left: widths
                    })
                    // 動畫:讓下一張圖片到當前的位置
                    animate(as[next], {
                        left: 0
                    }, function(){
                        flag = true;
                    });
                    // 更新下標
                    num = next;
                }

                // 分頁器切換圖片
                for (var i = 0; i < lis.length; i++) {
                    // 保存下標lis[i].index == i,方便后期給每個lis添加點擊事件
                    lis[i].index = i;
                    // 給每個lis添加點擊事件
                    lis[i].onclick = function(){
                        for(var j = 0; j < lis.length; j++){
                            // 如果點擊的是當前一張圖片,即num == this.index;不能切換圖片
                            if (num == this.index) {
                                return;
                            };
                            // 讓當前的下標的圖片就位到右邊
                            as[this.index].style.left = widths + 'px';
                            lis[num].className = '';
                            lis[this.index].className = 'active';
                            // 將當前的一張移動到left:-width的位置
                            animate(as[num], {
                                left: -widths
                            });
                            // 將符合下標的一張圖片移動到left:0的位置
                            animate(as[this.index], {
                                left: 0
                            })
                            // 更新下標
                            num = this.index;
                        }
                    }
                };

                // 點擊右邊向想左移動
                btnR.onclick = function(){
                    if (flag) {
                        flag = false;
                        moveL();
                    }
                }

                // 點擊左邊向想左移動
                btnL.onclick = function(){
                    if (flag) {
                        flag = false;
                        moveR();
                    }
                }

                // 鼠標滑過win時清除時間函數
                win.onmouseover = function() {
                    clearInterval(timer);
                };

                // 鼠標離開win時開啟時間函數
                win.onmouseout = function() {
                    timer = setInterval(moveL, 2000);
                };
            }
        </script>

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM