【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)文章
javascript實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲
本文很簡(jiǎn)單,給大家分享了一段使用javascript實(shí)現(xiàn)簡(jiǎn)單的貪吃蛇游戲的代碼,算是對(duì)自己學(xué)習(xí)javascript的一次小小的總結(jié),代碼參考了網(wǎng)友的部分內(nèi)容,推薦給大家,希望對(duì)大家能夠有所幫助。2015-03-03jqgrid 表格數(shù)據(jù)導(dǎo)出實(shí)例
jqgrid并沒(méi)有自帶導(dǎo)出表格數(shù)據(jù)的方法,這里就自己實(shí)現(xiàn)了一個(gè),嘗試過(guò)在頁(yè)面直接將數(shù)據(jù)導(dǎo)出,發(fā)現(xiàn)只有IE下可以通過(guò)調(diào)用saveas來(lái)實(shí)現(xiàn),但是別的瀏覽器不支持,于是考慮將數(shù)據(jù)傳回后臺(tái),然后后臺(tái)返回下載文件來(lái)實(shí)現(xiàn)2013-11-11webpack4 配置 ssr 環(huán)境遇到“document is not defined”
這篇文章主要介紹了webpack4 配置 ssr 環(huán)境遇到“document is not defined”,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10js操縱跨frame的三級(jí)聯(lián)動(dòng)select下拉選項(xiàng)實(shí)例介紹
運(yùn)用HTML、CSS以及Javascript相關(guān)知識(shí),編寫(xiě)多窗口多菜單的內(nèi)容聯(lián)動(dòng),具體思路及代碼如下,感興趣的朋友可以參考下哈,希望大家有所幫助2013-05-05JS實(shí)現(xiàn)窗口加載時(shí)模擬鼠標(biāo)移動(dòng)的方法
這篇文章主要介紹了JS實(shí)現(xiàn)窗口加載時(shí)模擬鼠標(biāo)移動(dòng)的方法,涉及javascript鼠標(biāo)事件的相關(guān)技巧,需要的朋友可以參考下2015-06-06JavaScript動(dòng)態(tài)檢驗(yàn)密碼強(qiáng)度的實(shí)現(xiàn)方法
平時(shí)我們會(huì)在某些網(wǎng)站的注冊(cè)頁(yè)面或者更改密碼的頁(yè)面發(fā)現(xiàn)當(dāng)我們輸入密碼時(shí),會(huì)有一個(gè)類(lèi)似于進(jìn)度條的長(zhǎng)條進(jìn)行提示用戶輸入的密碼強(qiáng)度。那么這種效果怎么實(shí)現(xiàn)的呢?下面小編給大家介紹下js動(dòng)態(tài)檢驗(yàn)密碼強(qiáng)度的實(shí)現(xiàn)方法,一起看看吧2016-11-11