jQuery實現(xiàn)視差滾動輪播代碼解析之 HTML+CSS

系列

jQuery實現(xiàn)視差滾動輪播代碼解析之 JavaScript

一驾霜、前言

本篇文章需要有一定的HTML+CSS基礎(chǔ),以及掌握J(rèn)S基本語法伦腐。以這個作為web前端入門學(xué)習(xí)的很好的一個項目為切入點,逐行地分析每一段代碼,并分享我目前掌握的web前端的些許心得蹬屹,供大家共同探討。對于web前端白华,目前我也是入門級別哩治,若您對本篇文章內(nèi)容有任何疑問或建議,望及時提出衬鱼,謝謝R捣ぁ!鸟赫!蒜胖。

二消别、項目效果

效果圖

三、分析需求

針對上面的項目效果圖台谢,我們做一下全面的需求分析寻狂。
首先,此頁面可以大致分為兩個部分朋沮,即標(biāo)題部分蛇券、輪播部分

  1. 標(biāo)題部分很簡單樊拓,可以使用一個塊級標(biāo)簽h1標(biāo)簽即可纠亚。
  2. 輪播部分內(nèi)容比較豐富多變,我們逐次進(jìn)行分解解析:
  • 最底層的是背景模塊
  • 在頁面圖片加載完成前筋夏,會在背景模塊上有個加載框模塊
  • 與加載框的同級模塊(一個隱藏蒂胞,另一個現(xiàn)實),及輪播的主題內(nèi)容模塊又可分為下面3個部分:
    輪播大圖部分条篷、前置后置引導(dǎo)骗随、縮略圖部分

四、HTML代碼搭建與CSS樣式實現(xiàn)

注:具體代碼說明赴叹,請閱讀代碼注釋鸿染。

1. 首先先將最外層兩大基本模塊,搭建出來乞巧。HTML代碼如下:
<!--上部分-->
<div class="title">
        <h1>jQuery實現(xiàn)個性輪播圖</h1>
</div>
<!--上部分結(jié)束-->
<!--輪播部分-->
<div id="banner">
</div>
<!--輪播部分結(jié)束-->

根據(jù)其對應(yīng)的選擇器牡昆,設(shè)置兩大模塊css樣式。CSS代碼如下:

/*common 設(shè)置項目中全局標(biāo)簽樣式*/
*{
    margin: 0px;
    padding: 0px;
}

h1{
    font-size: 56px;
    color: #ccc;
}

.title{
    /*設(shè)置文本內(nèi)容居中*/
    text-align: center;
    /*設(shè)置標(biāo)簽上下間距摊欠,并左右居中顯示*/
    margin: 100px auto 20px;
}

/*banner*/
#banner{
    /*寬度為占滿屏幕*/
    width: 100%;
    height: 420px;
    /*頂部邊框樣式*/
    border-top: 7px solid yellow;
    /*底部邊框樣式*/
    border-bottom: 7px solid yellow;
    /*上下丢烘、左右的陰影設(shè)置*/
    box-shadow: 0px 0px 7px black;
   /*因為輪播部分內(nèi)容豐富,所以設(shè)置其子標(biāo)簽絕對定位*/ 
    position: relative;
    /*設(shè)置輪播部分超出部分進(jìn)行裁剪些椒,不進(jìn)行滾動顯示*/
    overflow-x: hidden;
}
2. 輪播部分之背景模塊

其背景模塊播瞳,是由一個背景框,里面包含三張背景圖片組成免糕。HTML代碼如下:

<!--輪播部分-->
<div id="banner">
        <!--bannerBg-->
        <div class="bannerBg">
            <div class="bannerBg01"></div>
            <div class="bannerBg02"></div>
            <div class="bannerBg03"></div>
        </div>
        <!--bannerBg結(jié)束-->
...

背景模塊CSS代碼如下:

/*bannerBg*/
.bannerBg{
    /*背景模塊邊框圖片*/
    background: url("../images/bg.png") repeat;
}

.bannerBg div{
    /*背景模塊里的圖片使用絕對定位*/
    position:absolute;
    /*絕對定位top,left*/
    top:0px;
    left:0px;
    /*設(shè)置寬高,高度與輪播部分一致*/
    width:100%;
    height:420px;
}

.bannerBg01{
    /*背景模塊里第一張圖片資源*/
    background: url("../images/bg1.png");
}

.bannerBg02{
     /*背景模塊里第二張圖片資源*/
    background: url("../images/bg2.png");
}

.bannerBg03{
     /*背景模塊里第三張圖片資源*/
    background: url("../images/bg3.png");
}
/*bannerBg結(jié)束*/
3. 輪播部分之加載框模塊

效果圖上沒有展示出加載框赢乓,因為圖片都已經(jīng)加載完成。下面我截取一張加載框圖片樣式如下:


image.png

比較簡單石窑,我們有很多種實現(xiàn)方案牌芋,下面為最簡潔的一種。直接就一個div標(biāo)簽松逊,轉(zhuǎn)動的圈圈可以設(shè)為其background躺屁,結(jié)合使用精靈圖定位的方法設(shè)置其位置,文字即為div標(biāo)簽的內(nèi)容经宏。
HTML代碼如下:

...
<!--bannerBg結(jié)束-->
<div class="banner_loading">加載圖片中...</div>
...

CSS代碼如下:

/*loading*/
.banner_loading{
    /*設(shè)置標(biāo)簽內(nèi)容文字顏色*/
    color: #FFFFFF;
    /*設(shè)置標(biāo)簽內(nèi)容文字大小*/
    font-size: 20px;
    /*設(shè)置標(biāo)簽內(nèi)容上下左右內(nèi)邊距犀暑,因左邊有轉(zhuǎn)圈圖驯击,所以我們給左邊預(yù)留50px間距*/
    padding: 15px 15px 15px 50px;
    /*設(shè)置標(biāo)簽背景,并使用精靈圖定位耐亏。左邊距離10px徊都,上下50%居中*/
    background: url("../images/ajax-loader.gif") no-repeat 10px 50%;
    /*設(shè)置加載框標(biāo)簽寬度*/
    width: 180px;
   /*使用絕對定位,并設(shè)置其距離相對定位標(biāo)簽的top广辰,left值*/
    position: absolute;
    top: 150px;
    left: 50%;
    /*調(diào)整其左間距暇矫,配合其寬度。使加載框左右居中*/
    margin-left: -90px;
}
/*loading結(jié)束*/
4. 輪播部分之輪播主體模塊

輪播主體在需求分析時择吊,已經(jīng)劃分了三個子模塊:

  • 輪播大圖模塊李根,其有多個圖片組成,所以很適合使用無序ul標(biāo)簽干发。HTML代碼如下:
<!--輪播主體模塊-->
<div class="banner_content">
       <!--輪播大圖模塊-->
       <ul class="banner_images">
                <li><img src="images/1.jpg" alt="第一張圖片"></li>
                <li><img src="images/2.jpg" alt="第二張圖片"></li>
                <li><img src="images/3.jpg" alt="第三張圖片"></li>
                <li><img src="images/4.jpg" alt="第四張圖片"></li>
                <li><img src="images/5.jpg" alt="第五張圖片"></li>
                <li><img src="images/6.jpg" alt="第六張圖片"></li>
        </ul>
        <!--輪播大圖模塊結(jié)束-->
        ...
</div>
<!--輪播主體模塊結(jié)束-->

CSS代碼:

/*輪播主體模塊*/
.banner_content{
    /*圖片加載完成前朱巨,先顯示加載框史翘,所以先將輪播主體隱藏*/
    display: none;
}

.banner_content ul{
    /*設(shè)置輪播大圖ul標(biāo)簽樣式*/
    list-style: none;
    /*這里設(shè)置絕對定位枉长,為以后點擊前置后置滾動,刷新其left值做基礎(chǔ)*/
    position: absolute;
}

ul.banner_images li{
    /*設(shè)置li標(biāo)簽左浮動琼讽,將塊級li標(biāo)簽變成行內(nèi)塊級*/
    float: left;
    /*設(shè)置行內(nèi)塊級li標(biāo)簽高度*/
    height: 420px;
}

ul.banner_images li img{
    /*將img標(biāo)簽由行內(nèi)塊級標(biāo)簽變成塊級標(biāo)簽必峰,這樣通過外間距可設(shè)置其相對于父標(biāo)簽水平居中*/
    display: block;
    margin: 30px auto 0px;
    /*設(shè)置其陰影樣式*/
    box-shadow: 0px 0px 7px #222;
    /*設(shè)置邊框樣式,transparent為透明色*/
    border: 8px solid transparent;
    /*設(shè)置圓角*/
    border-radius: 4px;
}
  • 輪播前置后置引導(dǎo)
    前置后置引導(dǎo)即兩個左右箭頭钻蹬,點擊可對圖片進(jìn)行輪播轉(zhuǎn)換吼蚁。HTML代碼如下:
...
<!--輪播大圖模塊結(jié)束-->
<!--前置后置引導(dǎo)模塊-->
<div class="bannerGuide">
        <span class="bannerGuide_last"></span>
        <span class="bannerGuide_next"></span>
</div>
<!--前置后置引導(dǎo)模塊結(jié)束-->
...

CSS代碼如下:

.bannerGuide span{
    /*設(shè)置前置后置為絕對定位,并賦值top值*/
    position: absolute;
    top: 145px;
    /*設(shè)置絕對定位后问欠,行內(nèi)標(biāo)簽span變?yōu)樾袃?nèi)塊級標(biāo)簽肝匆,所以要設(shè)置其width,height*/
    width: 30px;
    height: 60px;
    /*設(shè)置陰影樣式*/
    box-shadow: 0px 0px 7px yellow;
    /*設(shè)置其透明度*/
    /*opacity: 0.6;*/
    /*設(shè)置圓角*/
    border-radius: 4px;
    /*光標(biāo)為一只手的樣式*/
    cursor:pointer;
}

.bannerGuide span:hover{
    /*設(shè)置前置后置偽類樣式顺献,更改透明度*/
    opacity: 0.9;
}

.bannerGuide span.bannerGuide_last{
    /*對應(yīng)設(shè)置前置背景圖片旗国,并將其背景顏色設(shè)為黑色*/
    background: #000 url("../images/prev.png") no-repeat center center;
}

.bannerGuide span.bannerGuide_next{
    /*對應(yīng)設(shè)置后置背景圖片,并將其背景顏色設(shè)為黑色*/
    background: #000 url("../images/next.png") no-repeat center center;
}
  • 輪播縮略圖模塊注整。其和輪播大圖一樣能曾,是多個圖片的集合。區(qū)別是樣式不同肿轨,且擁有點擊時間
...
<!--輪播前置后置模塊結(jié)束-->
<!--輪播縮略圖模塊-->
<ul class="banner_thumbnails">
        <li><img src="images/thumbs/1.jpg" alt="第一張圖片"></li>
        <li><img src="images/thumbs/2.jpg" alt="第二張圖片"></li>
        <li><img src="images/thumbs/3.jpg" alt="第三張圖片"></li>
        <li><img src="images/thumbs/4.jpg" alt="第四張圖片"></li>
        <li><img src="images/thumbs/5.jpg" alt="第五張圖片"></li>
        <li><img src="images/thumbs/6.jpg" alt="第六張圖片"></li
</ul>
<!--輪播縮略圖模塊結(jié)束-->
...

CSS代碼如下:

ul.banner_thumbnails{
    /*設(shè)置縮略圖無序ul標(biāo)簽為絕對定位寿冕,并設(shè)置top,left值*/
    position: absolute;
    top: 320px;
    left: 50%;
    /*設(shè)置其高度*/
    height: 35px;
}

ul.banner_thumbnails li{
    /*設(shè)置li標(biāo)簽為絕對定位椒袍,為以后js設(shè)置每個li標(biāo)簽的left做基礎(chǔ)*/
    position: absolute;
}

ul.banner_thumbnails li img{
    /*設(shè)置縮略圖片的邊框樣式*/
    border: 5px solid #FFFFFF;
    /*設(shè)置縮略圖片的陰影樣式*/
    box-shadow: 0px 0px 7px red;
    /*光標(biāo)為一只手的樣式*/
    cursor: pointer;
    /*設(shè)置透明度*/
    opacity: 0.7;
}

ul.banner_thumbnails li.selected img{
    /*設(shè)置li標(biāo)簽為selected類選擇器時透明度值驼唱,方便以后js可以重置selected標(biāo)簽*/
    opacity: 0.9;
}

五、分析HTML+CSS完成的進(jìn)度與JS要完成的使命

坐完上面的需求驹暑,HTML+CSS大致已經(jīng)完成了其使命曙蒸。接下來其不能實現(xiàn)的邏輯需要JS完成了捌治。
那么JS需要完成哪些功能呢,我們先分析一下纽窟。

  • 圖片加載完成后肖油,隱藏加載框,顯示輪播模塊臂港。
  • 目前輪播大圖容器ul標(biāo)簽下的li標(biāo)簽為左浮動森枪,且設(shè)置了其高度。但是需求是每個li標(biāo)簽都是在同一水平線上的审孽,這樣才能實現(xiàn)水平動畫滾動效果县袱。所以我們要使用js根據(jù)圖片數(shù)據(jù),重新計算ul標(biāo)簽的寬度佑力。
    因為ul的父標(biāo)簽設(shè)置了overflow-x為hidden式散,所以不用擔(dān)心ul超出屏幕寬度能夠水平滾動
  • 目前縮略圖容器ul標(biāo)簽下的li標(biāo)簽為絕對定位,但是并沒有設(shè)置其定位值打颤,所以目前默認(rèn)的縮略圖應(yīng)該是重疊的暴拄。所以我們要利用js根據(jù)縮略圖數(shù)量,計算其絕對定位置编饺。
  • 縮略圖片有個隨機(jī)的角度偏移乖篷。
  • 點擊前置后置后,動畫切換大圖透且,并更改縮略圖選擇樣式撕蔼。
  • 點擊縮略圖,動畫切換大圖秽誊,并更改縮略圖選擇樣式鲸沮。
  • 光標(biāo)放到縮略圖與離開縮略圖有個動畫效果。
    以上七點就是分析出來的JS要完成的事情锅论,下一章我們使用jQuery框架對這七點如何實現(xiàn)讼溺,逐一進(jìn)行講解。敬請期待

對了棍厌,忘了最重要的~這是Demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肾胯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子耘纱,更是在濱河造成了極大的恐慌敬肚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件束析,死亡現(xiàn)場離奇詭異艳馒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門弄慰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來第美,“玉大人,你說我怎么就攤上這事陆爽∈餐” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵慌闭,是天一觀的道長别威。 經(jīng)常有香客問我,道長驴剔,這世上最難降的妖魔是什么省古? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮丧失,結(jié)果婚禮上豺妓,老公的妹妹穿的比我還像新娘。我一直安慰自己布讹,他們只是感情好琳拭,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炒事,像睡著了一般臀栈。 火紅的嫁衣襯著肌膚如雪蔫慧。 梳的紋絲不亂的頭發(fā)上挠乳,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音姑躲,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛绽族,可吹牛的內(nèi)容都是我干的键思。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼阐枣,長吁一口氣:“原來是場噩夢啊……” “哼马靠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蔼两,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甩鳄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后额划,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妙啃,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了揖赴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馆匿。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖燥滑,靈堂內(nèi)的尸體忽然破棺而出渐北,到底是詐尸還是另有隱情,我是刑警寧澤铭拧,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布腔稀,位于F島的核電站,受9級特大地震影響羽历,放射性物質(zhì)發(fā)生泄漏焊虏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一秕磷、第九天 我趴在偏房一處隱蔽的房頂上張望诵闭。 院中可真熱鬧,春花似錦澎嚣、人聲如沸疏尿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褥琐。三九已至,卻和暖如春晤郑,著一層夾襖步出監(jiān)牢的瞬間敌呈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工造寝, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留磕洪,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓诫龙,卻偏偏與公主長得像析显,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子签赃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355