系列
jQuery實現(xiàn)視差滾動輪播代碼解析之 JavaScript
一驾霜、前言
本篇文章需要有一定的HTML+CSS基礎(chǔ),以及掌握J(rèn)S基本語法伦腐。以這個作為web前端入門學(xué)習(xí)的很好的一個項目為切入點,逐行地分析每一段代碼,并分享我目前掌握的web前端的些許心得蹬屹,供大家共同探討。對于web前端白华,目前我也是入門級別哩治,若您對本篇文章內(nèi)容有任何疑問或建議,望及時提出衬鱼,謝謝R捣ぁ!鸟赫!蒜胖。
二消别、項目效果
三、分析需求
針對上面的項目效果圖台谢,我們做一下全面的需求分析寻狂。
首先,此頁面可以大致分為兩個部分朋沮,即標(biāo)題部分蛇券、輪播部分。
- 標(biāo)題部分很簡單樊拓,可以使用一個塊級標(biāo)簽h1標(biāo)簽即可纠亚。
- 輪播部分內(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)加載完成。下面我截取一張加載框圖片樣式如下:
比較簡單石窑,我們有很多種實現(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