一、前期准備
1.1 案例分析
適用場景:單例布局
1.2 方法論
V視圖 HTML+CSS+調試
C js實現控制流程
D數據 優化擴展
二、代碼
結構
<div class="slider"><!-- 特效區 -->
<div class="main"><!-- 主視圖區 -->
<div class="main_i">
<div class="caption">
<h2>h2 caption</h2>
<h2>h3 caption</h2>
</div>
<img src="images/{{index}}.jpg" alt="">
</div>
</div><!-- 主視圖區結束 -->
<div class="ctrl"><!-- 控制區 -->
<a href="javascript:;"><img src="images/{{index}}.jpg" alt="">
</a>
</div><!-- 控制區結束 -->
</div><!-- 特效區結束 -->
樣式(CSS略)
腳本功能開發
>>內容輸出
Template改造 輸出幻燈片&控制按鈕 圖片位置調整
>>切換控制
切換幻燈片 .main_i_active 切換控制按鈕 .ctrl_i_active
0、修改VIEW ->Template(關鍵字替換),增加Template id
圖片區
<div class="main" id="template_main">
<h2>{{h2}}}</h2>
<h3>{{h3}}}</h3>
<img src="images/{{index}}.jpg">
按鈕區
<div class="ctrl" id="template_ctrl">
<a class="ctrl_i" id="ctrl_{{index}}" href="javascript:switchSlider({{index}});"><img src="images/{{index}}.jpg" alt="圖片預覽"></a>
下面是重點 JS腳本的編寫~~
<script type="text/javascript">
// 1、數據定義(實際生產環境,應由後台給出)
var data = [
{img:1,h2:"我是標題二,小標題",h3:"我是標題三,大標題"},
{img:2,h2:"我是標題二,小標題",h3:"我是標題三,大標題"},
{img:3,h2:"我是標題二,小標題",h3:"我是標題三,大標題"},
{img:4,h2:"我是標題二,小標題",h3:"我是標題三,大標題"},
{img:5,h2:"我是標題二,小標題",h3:"我是標題三,大標題"},
{img:6,h2:"我是標題二,小標題",h3:"我是標題三,大標題"},
{img:7,h2:"我是標題二,小標題",h3:"我是標題三,大標題"},
];
// 2、通用函數
var g = function(id){
if( id.substr(0,1) =="." ){
return document.getElementsByClassName( id.substr(1) );
}
return document.getElementById(id);
}
// 3、添加幻燈片的操作(所有幻燈片&對應的按鈕)
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 遍歷所有數據,構建最終輸出的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回寫到對應的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 獲得要展現的幻燈片&控制按鈕 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為當前控制按鈕和幻燈片附加樣式
g("main_"+n).className += ' main_i_active';
g("ctrl_"+n).className += ' ctrl_i_active';
// 7.2切換時 復制上一張幻燈片到main_background中
setTimeout(function(){
g('main_background').innerHTML = main.innerHTML;
},1000);
}
// 6、動態調整圖片的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、定義何時處理幻燈片輸出
window.onload = function(){
addSliders();
switchSliders(1);
setTimeout(function(){
movePictures();
},100)
}
</script>
效果圖 … = =莫吐槽又是這幾張圖~~~
遇到問題:
1、 給圖片直接加top:50%;會有BUG,沒作用,原因可能是沒給height固定高度~~給了固定高度就好了
但問題又來了,2、給固定高度後,按鈕組不能自適應寬度 … 會被擠到第二排去 ……
以上這篇【JS+CSS3】實現帶預覽圖幻燈片效果的示例代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。