【JS+CSS3】實(shí)現(xiàn)帶預(yù)覽圖幻燈片效果的示例代碼
一、前期準(zhǔn)備
1.1 案例分析
適用場(chǎng)景:?jiǎn)卫季?br /> 1.2 方法論
V視圖 HTML+CSS+調(diào)試
C js實(shí)現(xiàn)控制流程
D數(shù)據(jù) 優(yōu)化擴(kuò)展
二、代碼
結(jié)構(gòu)
<div class="slider"><!-- 特效區(qū) -->
<div class="main"><!-- 主視圖區(qū) -->
<div class="main_i">
<div class="caption">
<h2>h2 caption</h2>
<h2>h3 caption</h2>
</div>
<img src="images/{{index}}.jpg" alt="">
</div>
</div><!-- 主視圖區(qū)結(jié)束 -->
<div class="ctrl"><!-- 控制區(qū) -->
<a href="javascript:;"><img src="images/{{index}}.jpg" alt="">
</a>
</div><!-- 控制區(qū)結(jié)束 -->
</div><!-- 特效區(qū)結(jié)束 -->
樣式(CSS略)
腳本功能開(kāi)發(fā)
>>內(nèi)容輸出
Template改造 輸出幻燈片&控制按鈕 圖片位置調(diào)整
>>切換控制
切換幻燈片 .main_i_active 切換控制按鈕 .ctrl_i_active
0、修改VIEW ->Template(關(guān)鍵字替換),增加Template id
圖片區(qū)
<div class="main" id="template_main">
<h2>{{h2}}}</h2>
<h3>{{h3}}}</h3>
<img src="images/{{index}}.jpg">
按鈕區(qū)
<div class="ctrl" id="template_ctrl">
<a class="ctrl_i" id="ctrl_{{index}}" href="javascript:switchSlider({{index}});"><img src="images/{{index}}.jpg" alt="圖片預(yù)覽"></a>
下面是重點(diǎn) JS腳本的編寫(xiě)~~
<script type="text/javascript">
// 1、數(shù)據(jù)定義(實(shí)際生產(chǎn)環(huán)境,應(yīng)由后臺(tái)給出)
var data = [
{img:1,h2:"我是標(biāo)題二,小標(biāo)題",h3:"我是標(biāo)題三,大標(biāo)題"},
{img:2,h2:"我是標(biāo)題二,小標(biāo)題",h3:"我是標(biāo)題三,大標(biāo)題"},
{img:3,h2:"我是標(biāo)題二,小標(biāo)題",h3:"我是標(biāo)題三,大標(biāo)題"},
{img:4,h2:"我是標(biāo)題二,小標(biāo)題",h3:"我是標(biāo)題三,大標(biāo)題"},
{img:5,h2:"我是標(biāo)題二,小標(biāo)題",h3:"我是標(biāo)題三,大標(biāo)題"},
{img:6,h2:"我是標(biāo)題二,小標(biāo)題",h3:"我是標(biāo)題三,大標(biāo)題"},
{img:7,h2:"我是標(biāo)題二,小標(biāo)題",h3:"我是標(biāo)題三,大標(biāo)題"},
];
// 2、通用函數(shù)
var g = function(id){
if( id.substr(0,1) =="." ){
return document.getElementsByClassName( id.substr(1) );
}
return document.getElementById(id);
}
// 3、添加幻燈片的操作(所有幻燈片&對(duì)應(yīng)的按鈕)
function addSliders(){
// 3.1 獲取模版
var tpl_main = g("template_main").innerHTML
.replace(/^\s*/,'')
.replace(/\s*$/,'');
var tpl_ctrl = g("template_ctrl").innerHTML
.replace(/^\s*/,'')
.replace(/\s*$/,'');
// 3.2 定義最終輸出HTML的變量
var out_main = [];
var out_ctrl = [];
// 3.3 遍歷所有數(shù)據(jù),構(gòu)建最終輸出的HTML
for( i in data ){
var _html_main = tpl_main
.replace(/{{index}}/g,data[i].img)
.replace(/{{h2}}/g,data[i].h2)
.replace(/{{h3}}/g,data[i].h3)
.replace(/{{css}}/g,['','main_i_right'][i%2]);
var _html_ctrl = tpl_ctrl
.replace(/{{index}}/g,data[i].img);
out_main.push(_html_main);
out_ctrl.push(_html_ctrl);
}
// 3.4 把HTML回寫(xiě)到對(duì)應(yīng)的DOM里面
g("template_main").innerHTML = out_main.join('');
g("template_ctrl").innerHTML = out_ctrl.join('');
// 7、增加#main_background
g('template_main').innerHTML += tpl_main
.replace(/{{index}}/g,'{{index}}')
.replace(/{{h2}}/g,data[i].h2)
.replace(/{{h3}}/g,data[i].h3);
g('main_{{index}}').id = 'main_background';
}
// 5、幻燈片切換
function switchSliders(n){
// 5.1 獲得要展現(xiàn)的幻燈片&控制按鈕 DOM
var main = g("main_"+n);
var ctrl = g("ctrl_"+n);
// 5.2 獲得所有的幻燈片&控制按鈕
var clear_main = g('.main_i');
var clear_ctrl = g('.ctrl_i');
// 5.3 清除他們的active樣式
for(var i=0;i<clear_ctrl.length;i++){
clear_main[i].className = clear_main[i].className.replace('main_i_active','');
clear_ctrl[i].className = clear_ctrl[i].className.replace('ctrl_i_active','');
}
// 5.4為當(dāng)前控制按鈕和幻燈片附加樣式
g("main_"+n).className += ' main_i_active';
g("ctrl_"+n).className += ' ctrl_i_active';
// 7.2切換時(shí) 復(fù)制上一張幻燈片到main_background中
setTimeout(function(){
g('main_background').innerHTML = main.innerHTML;
},1000);
}
// 6、動(dòng)態(tài)調(diào)整圖片的margin-top 使其垂直居中
function movePictures(){
var pictures = g('.picture');
for(i=0;i<pictures.length;i++){
pictures[i].style.marginTop = -(pictures[i].clientHeight/3) + 'px';
}
}
// 4、定義何時(shí)處理幻燈片輸出
window.onload = function(){
addSliders();
switchSliders(1);
setTimeout(function(){
movePictures();
},100)
}
</script>
效果圖 … = =莫吐槽又是這幾張圖~~~
遇到問(wèn)題:
1、 給圖片直接加top:50%;會(huì)有BUG,沒(méi)作用,原因可能是沒(méi)給height固定高度~~給了固定高度就好了
但問(wèn)題又來(lái)了,2、給固定高度后,按鈕組不能自適應(yīng)寬度 … 會(huì)被擠到第二排去 ……
以上這篇【JS+CSS3】實(shí)現(xiàn)帶預(yù)覽圖幻燈片效果的示例代碼就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Angularjs 實(shí)現(xiàn)一個(gè)幻燈片示例代碼
- JS實(shí)現(xiàn)的幻燈片切換顯示效果
- JS實(shí)現(xiàn)的多張圖片輪流播放幻燈片效果
- Javascript實(shí)現(xiàn)跑馬燈效果的簡(jiǎn)單實(shí)例
- JavaScript實(shí)現(xiàn)跑馬燈抽獎(jiǎng)活動(dòng)實(shí)例代碼解析與優(yōu)化(二)
- javascript跑馬燈抽獎(jiǎng)實(shí)例講解
- javascript新聞跑馬燈實(shí)例代碼
- JS實(shí)現(xiàn)狀態(tài)欄跑馬燈文字效果代碼
- js實(shí)現(xiàn)3D圖片逐張輪播幻燈片特效代碼分享
- js實(shí)現(xiàn)交通燈效果
相關(guān)文章
JS實(shí)現(xiàn)點(diǎn)擊事件統(tǒng)計(jì)的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇JS實(shí)現(xiàn)點(diǎn)擊事件統(tǒng)計(jì)的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
手機(jī)軟鍵盤(pán)彈出時(shí)影響布局的解決方法
這篇文章主要介紹了手機(jī)軟鍵盤(pán)彈出時(shí)影響布局的解決方法的相關(guān)資料,大家開(kāi)發(fā)移動(dòng)端的軟件時(shí)候,肯定會(huì)因?yàn)檐涙I盤(pán)的彈窗影響布局,這里說(shuō)下如何解決,需要的朋友可以參考下2016-12-12
TypeScript 中的 .d.ts 文件詳解(加強(qiáng)類型支持提升開(kāi)發(fā)效率)
.d.ts 文件在 TypeScript 開(kāi)發(fā)中扮演著非常重要的角色,它們讓我們能夠享受到 TypeScript 強(qiáng)大的類型系統(tǒng)帶來(lái)的優(yōu)勢(shì),提高代碼質(zhì)量和開(kāi)發(fā)效率,接下來(lái),我們將深入探討如何為 JavaScript 庫(kù)和自定義模塊創(chuàng)建 .d.ts 文件,以及一些最佳實(shí)踐和注意事項(xiàng),一起看看吧2023-09-09
基于JS代碼實(shí)現(xiàn)圖片在頁(yè)面中旋轉(zhuǎn)效果
這篇文章主要介紹了基于JS代碼實(shí)現(xiàn)圖片在頁(yè)面中旋轉(zhuǎn)效果 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
javascript設(shè)置頁(yè)面背景色及背景圖片的方法
這篇文章主要介紹了javascript設(shè)置頁(yè)面背景色及背景圖片的方法,涉及JavaScript動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,需要的朋友可以參考下2015-12-12
判斷js的Array和Object的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇判斷js的Array和Object的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08

