1、前期準備javascript
1.1 案例分析css
適用場景:單例佈局
1.2 方法論html
V視圖 HTML+CSS+調試
C js實現控制流程
D數據 優化擴展java
2、代碼ide
結構函數
<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改造 輸出幻燈片&控制按鈕 圖片位置調整spa
>>切換控制
切換幻燈片 .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"> // 一、數據定義(實際生產環境,應由後臺給出) 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:"我是標題三,大標題"}, ]; // 二、通用函數 var g = function(id){ if( id.substr(0,1) =="." ){ return document.getElementsByClassName( id.substr(1) ); } return document.getElementById(id); } // 三、添加幻燈片的操做(全部幻燈片&對應的按鈕) 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(''); // 七、增長#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'; } // 五、幻燈片切換 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); } // 六、動態調整圖片的margin-top 使其垂直居中 function movePictures(){ var pictures = g('.picture'); for(i=0;i<pictures.length;i++){ pictures[i].style.marginTop = -(pictures[i].clientHeight/3) + 'px'; } } // 四、定義什麼時候處理幻燈片輸出 window.onload = function(){ addSliders(); switchSliders(1); setTimeout(function(){ movePictures(); },100) } </script>
效果圖 … = =莫吐槽又是這幾張圖~~~
遇到問題:
一、 給圖片直接加top:50%;會有BUG,沒做用,緣由多是沒給height固定高度~~給了固定高度就行了
但問題又來了,二、給固定高度後,按鈕組不能自適應寬度 … 會被擠到第二排去 ……
蛋疼。。之後來填坑吧