自實現PC端jQuery版輪播圖


  最近其他項目不是很忙,被安排給公司的官網項目做一個新的頁面(之前沒接觸公司官網項目),其中有一個用到輪播圖的地方,最開始想直接用swiper.js插件實現就好了,可是發現官網項目里之前都沒有引入過swiper.js,后來想了想,就不引入它了,免得又得增加依次一次網絡請求,項目里既然已經用到了jQuery,那就索性用jQuery寫一個輪播圖吧。

  現在把自己寫的輪播圖這塊代碼單獨拿出來,做一個小demo寫在這里記錄一下(demo中輪播圖的圖片網上隨意找的)

  實現的效果:

    1、自動輪播(輪播時間間隔在js代碼中自定義)

    2、點擊左右側按鈕,實現手動切換

    3、底部小圓點根據切換圖片的位置相應的顯示active狀態

    4、鼠標經過輪播圖區域,停止輪播,離開輪播圖區域開始輪播

 

代碼目錄結果如下:

 

一、index.html

注:這里以5張圖片為例,頁面上真正輪播展示給用戶看到的是5張不同的圖片,但是為了輪播效果的連貫性,所以在第一張圖片前面添加上第五張圖片,在第五張圖片后面加上了第一張圖片,所以demo結構里是7張圖片,每張圖片的尺寸必須都是一樣的哦(這里寬高尺寸是720*350px)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PC-jquery版輪播圖</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
<div class="layout">
    <h2 style="text-align: center;">PC-jquery版輪播圖</h2>
    <div class="slide" id="slide">
        <div id="outer" class="outer">
            <ul id="inner" class="inner">
                <li><a href="http://www.baidu.com"><p>圖片-5</p><img src="images/slide-5.jpg"></a></li>
                <li><a href="http://www.baidu.com"><p>圖片-1</p><img src="images/slide-1.jpg"></a></li>
                <li><a href="http://www.baidu.com"><p>圖片-2</p><img src="images/slide-2.jpg"></a></li>
                <li><a href="http://www.baidu.com"><p>圖片-3</p><img src="images/slide-3.jpg"></a></li>
                <li><a href="http://www.baidu.com"><p>圖片-4</p><img src="images/slide-4.jpg"></a></li>
                <li><a href="http://www.baidu.com"><p>圖片-5</p><img src="images/slide-5.jpg"></a></li>
                <li><a href="http://www.baidu.com"><p>圖片-1</p><img src="images/slide-1.jpg"></a></li>
            </ul>

       <!--底部小圓點-->
<ol class="dot" id="dot"> <li class="active"></li> <li></li> <li></li> <li></li> <li></li> </ol> </div>
     <!--左右兩側的點擊切換按鈕-->
        <div class="arrow-box">
            <div class="arrow arrow-l" id="arrow_l"></div>
            <div class="arrow arrow-r" id="arrow_r"></div>
        </div>
    </div>
</div>

<script src="js/jquery.min.js"></script>
<script src="js/index.js"></script>
</body>
</html>

 

二、style.css

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
.layout {
    width: 1000px;
    margin: 30px auto;
}
ul,ol,li {
    list-style: none;
}
.slide {
    position: relative;
    width: 900px;
    margin:auto;
}
.slide .outer {
    position: relative;
    margin: 30px auto;
    width: 720px;
    height: 400px;
    overflow: hidden;
}
.slide .outer .inner {
    width: 5040px;
    height: 350px;
    position: absolute;
    left: -720px;
    top: 0;
}
.slide .outer .inner li {
    float: left;
    height: 350px;
}
.slide .outer .inner li a {
    display: block;
    position: relative;
    width: 100%;
    height: 100%;
}
.slide .outer .inner li a p {
    position: absolute;
    left: 0;
    bottom: 0;
    color: #fff;
    font-size: 18px;
    width: 720px;
    height: 80px;
    line-height: 80px;
    padding-left: 50px;
    background: linear-gradient(180deg,rgba(0,0,0,0), rgba(0,0,0,0.5));
}
.slide .outer .dot {
    margin-top: 365px;
    text-align: center;
}
.slide .outer .dot li {
    height: 6px;
    width: 6px;
    border-radius: 3px;
    background-color: #d2cbcb;
    display: inline-block;
    margin: 0 3px;
}
.slide .outer .dot li.active {
    background-color: #6e5ca5;
}
.slide .arrow-box {
    position: absolute;
    width: 900px;
    height: 60px;
    top: 150px;
    left: 0;
}
.slide .arrow-box .arrow {
    width: 60px;
    height: 60px;
    line-height: 60px;
    text-align: center;
    border-radius: 30px;
    background-color: #dde2e6;
    font-size: 60px;
    color: #999;
    cursor: pointer;
}
.slide .arrow-box .arrow.arrow-l {
    float: left;
}
.slide .arrow-box .arrow.arrow-r {
    float: right;
}

 

三、index.js

注:js代碼中,每個變量均已給了注釋。為了防止快速多次點擊,而出現動畫不停的現象,這里在每次切換圖片的時候先調用stop(false,true)。但是注意在向左側滾動的時候,滾動到最后一張圖圖片后,再次切換時就不要用stop(false,true),而是要瞬間定位到第一張圖片(其實是dom結構中的第二張)的位置,同樣,向右側滾動時,當滾動到第一張圖片后,再次切換時就不用stop(false,true),而是要瞬間定位到最后一張圖片(其實是dom結構中的倒數第二張)的位置。

var interval = 3000;                //輪播間隔時間
var arrowL = $('#arrow_l');         //左側箭頭
var arrowR = $('#arrow_r');         //右側箭頭

var slideBox = $('#slide');         //輪播圖區域
var innerBox = $('#inner');         //內層大盒子
var img = innerBox.children('li');  //每個圖片
var dot = $('#dot');                //小圓點盒子

var imgW = $(img[0]).outerWidth();  //每個li標簽的寬度

var imgCount = 5;                   //總圖片個數(不同圖片的個數)(實際dom上是有7張)
var i = 0;                          //初始化為第0張圖片
timer = null;                       //定時器

//自動輪播
timer = setInterval(function () {
    i++;
    innerBox.stop(false, true).animate({'left':-i*imgW+'px'},300)
    dot.find('li').removeClass('active').eq(i-1).addClass('active')
    if(i > imgCount){
        innerBox.animate({'left':-1*imgW+'px'},0);
        dot.find('li').removeClass('active').eq(0).addClass('active')
        i = 1;
    }
},interval)

//點擊右側箭頭,播放下一張
arrowR.click(function () {
    i++;
    innerBox.stop(false, true).animate({'left':-i*imgW+'px'},300)
    dot.find('li').removeClass('active').eq(i-1).addClass('active')
    if(i > imgCount){
        innerBox.animate({'left':-1*imgW+'px'},0);
        dot.find('li').removeClass('active').eq(0).addClass('active')
        i = 1;
    }
})

//點擊左側箭頭,播放上一張
arrowL.click(function () {
    i--;
    innerBox.stop(false, true).animate({'left':-i*imgW+'px'},300)
    dot.find('li').removeClass('active').eq(i-1).addClass('active')
    if(i < 1){
        innerBox.animate({'left':-imgCount*imgW+'px'},0);
        dot.find('li').removeClass('active').eq(imgCount-1).addClass('active')
        i = imgCount;
    }
})

//鼠標經過輪播圖區域時,清除定時器,停止自動輪播
slideBox.mouseenter(function () {
    clearInterval(timer);
})

//鼠標離開輪播圖區域時,重新啟動自動輪播
slideBox.mouseleave(function () {
    timer = setInterval(function () {
        i++;
        innerBox.stop(false, true).animate({'left':-i*imgW+'px'},300)
        dot.find('li').removeClass('active').eq(i-1).addClass('active')
        if(i > imgCount){
            innerBox.animate({'left':-1*imgW+'px'},0);
            dot.find('li').removeClass('active').eq(0).addClass('active')
            i = 1;
        }
    },interval)
})

 

四、效果圖展示

 

 注:畢竟是自己寫的,多少可能還會存在一些問題,如果有發現問題的,歡迎及時指出來哦。

 


免責聲明!

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



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