原生JavaScript實(shí)現(xiàn)幻燈片效果
當(dāng)我們制作一個頁面時,尤其是制作一個首頁時,通常會設(shè)計(jì)一個可以鏈接到整個網(wǎng)站的其他主體頁面的導(dǎo)航欄,或者一段網(wǎng)站的介紹文字中會包含這頁面的跳轉(zhuǎn),通常情況會使用title屬性為這些跳轉(zhuǎn)鏈接添加一些解釋性的文字,但是我們可以通過制作一個幻燈片的demo,加強(qiáng)用戶的體驗(yàn)性。當(dāng)用戶的鼠標(biāo)移動到某一鏈接時,下方會出現(xiàn)對應(yīng)的圖片預(yù)覽,這樣即美化頁面,又大大增加了整個網(wǎng)站的交互性,下面就讓我們一起制作一個漂亮的幻燈片腳本吧。
準(zhǔn)備:在制作腳本之前,需要制作一張圖片,這張圖片應(yīng)該展示了所有預(yù)覽效果,如下圖:
index.html
制作有序列表,添加一些頁面鏈接
<body> <h1>簡單動畫制作</h1> <p>連接跳轉(zhuǎn)目標(biāo)展示</p> <ol id="list"> <li> <a href="list1.html" >First</a> </li> <li> <a href="list2.html" >Second</a> </li> <li> <a href="list3.html" >Third</a> </li> </ol> <!--動態(tài)添加的圖片展示區(qū)域>--> <script src="script.js"></script> </body>
style.css
為這個導(dǎo)航欄添加一些樣式
ol{ padding-left: 20px; } ol li{ display: inline; margin-right: 10px; } #view{ width: 600px; height: 200px; position: absolute; } #slideShow{ width: 200px; height: 200px; overflow: hidden; position: relative; }
script.js
實(shí)現(xiàn)思路:
在建立腳本之前,我們先整理一下思路,確定我們要做什么?
1. 新建一些節(jié)點(diǎn)用來展示預(yù)覽圖片
2. 為a標(biāo)簽添加onmouseover事件
3. 通過setTimeout()函數(shù),和對圖片元素left、top偏移量(獲取設(shè)置的left top屬性時 要轉(zhuǎn)換稱整型)的移動完成動畫效果
/*共享load*/ function addLoadEvent(fun){ var oldLoad = window.onload; if(typeof oldLoad != "function"){ window.onload = fun; }else{ window.onload = function(){ oldLoad(); fun(); } } } /*insertAfter*/ function insertAfter(newNode,oldNode){ var parent = oldNode.parentNode; if(parent.lastChild == oldNode){ parent.appendChild(newNode); }else{ parent.insertBefore(newNode,oldNode.nextSibling); } } function show(){ /*向后兼容*/ if(!document.getElementById) return false; if(!document.getElementsByTagName) return false; if(!document.createElement) return false; /*獲取列表清單*/ var list = document.getElementById("list"); /*創(chuàng)建圖片展示區(qū)域*/ /*外層div*/ var div = document.createElement("div"); div.setAttribute("id","slideShow"); /*img*/ var img = document.createElement("img"); img.setAttribute("id","view"); img.setAttribute("src","image.jpg"); img.setAttribute("alt","圖片預(yù)覽"); /*添加 使用insertAfter()函數(shù) 保證div緊跟在list列表之后*/ insertAfter(div,list); div.appendChild(img); /*綁定事件*/ var a = list.getElementsByTagName("a"); a[0].onmouseover =function(){ moveElement("view",0,0,10); }; a[1].onmouseover = function(){ moveElement("view",-200,0,10); }; a[2].onmouseover = function(){ moveElement("view",-400,0,10); }; } /*移動 *參數(shù)的含義:圖片所在元素的id;圖片應(yīng)該向左移動的偏移量;上偏移量;時間 */ function moveElement(elementID,left,top,interval){ /*向后兼容*/ if(!document.getElementById) return false; if(!document.getElementById(elementID)) return false; /*獲取圖片*/ var img = document.getElementById(elementID); /*判斷當(dāng)前元素是否已經(jīng)處在一個動畫函數(shù)中 *防止動畫堆積 */ if(img.moveNow){ /*清楚堆棧中的動畫*/ clearTimeout(img.moveNow); } /*判斷元素是否設(shè)置了left和top*/ if(!img.style.left){ img.style.left = "0px"; } if(!img.style.top){ img.style.top = "0px"; } /*獲取圖片當(dāng)前位置 *此時獲取的值是字符串格式,使用parseInt()強(qiáng)制轉(zhuǎn)化為字符串*/ var oldLeft = parseInt(img.style.left); var oldTop = parseInt(img.style.top); /*將當(dāng)前位置與目標(biāo)位置做比較*/ if(oldLeft == left && oldTop == top){ return true; } /*為了保證用戶體驗(yàn),當(dāng)移動的距離較大時應(yīng)該移動的快一些 *當(dāng)移動的距離比較小時,可以適當(dāng)慢一些 *根據(jù)相差的距離判斷移動的距離,每次移動相差距離的1/10 */ /*dist變量用于存儲當(dāng)前偏移量與目標(biāo)偏移量的距離*/ var dist = 0; if(oldLeft < left){ /*ceil()向上取整 防止小數(shù) 以及小于1的情況*/ dist = Math.ceil((left-oldLeft)/10); oldLeft = oldLeft+dist; } if(oldLeft > left){ dist = Math.ceil((oldLeft-left)/10); oldLeft = oldLeft - dist; } if(oldTop < top){ dist = Math.ceil((top-oldTop)/10); oldTop = oldTop+dist; } if(oldTop > top){ dist = Math.ceil((oldTop-top)/10); oldTop = oldTop - dist; } /*移動*/ img.style.left = oldLeft+"px"; img.style.top = oldTop+"px"; /*調(diào)用函數(shù)*/ var result = "moveElement('"+elementID+"',"+left+","+top+","+interval+")"; /*將執(zhí)行動畫的函數(shù),設(shè)置成這個元素的一個屬性*/ img.moveNow = setTimeout(result,interval); } addLoadEvent(show);
最后執(zhí)行效果
此時,當(dāng)我們將鼠標(biāo)移動到不同列表項(xiàng)時,列表下的圖片就會移動到對應(yīng)的預(yù)覽圖位置。
到此,一個簡單的幻燈片demo就制作完成了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js 幻燈片的實(shí)現(xiàn)
- javascript實(shí)現(xiàn)圖片切換的幻燈片效果源代碼
- 漂亮的js tab圖片輪換效果代碼(可自定義的幻燈片和圖片緩沖切換)
- JS+FLASH幻燈片播放圖片腳本,整理了代碼,使得調(diào)用更加方便!
- 使用 JavaScript 創(chuàng)建可維護(hù)的幻燈片效果代碼
- js實(shí)現(xiàn)幻燈片播放圖片示例代碼
- JS實(shí)現(xiàn)的幻燈片切換顯示效果
- JS實(shí)現(xiàn)的多張圖片輪流播放幻燈片效果
- JS實(shí)現(xiàn)淘寶幻燈片效果的實(shí)現(xiàn)方法
- js帶點(diǎn)自動圖片輪播幻燈片特效代碼分享
相關(guān)文章
ie與firefox下的event使用說明與詳細(xì)區(qū)別
event是ie自帶的一個對象,而ff中不存在該對象,只能通過傳遞參數(shù)(并且惟一)的方式來實(shí)現(xiàn)event.2009-10-10bootstrap Table實(shí)現(xiàn)合并相同行
這篇文章主要為大家詳細(xì)介紹了bootstrapTable實(shí)現(xiàn)合并相同行,fastadmin框架同樣使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07小程序?qū)崿F(xiàn)新用戶判斷并跳轉(zhuǎn)激活的方法
這篇文章主要介紹了小程序?qū)崿F(xiàn)新用戶判斷并跳轉(zhuǎn)激活的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05借用Google的Javascript API Loader來加速你的網(wǎng)站
加速頁面加載速度有一個方法就是把CSS和JS文件放到另外一個單獨(dú)的服務(wù)器上,這樣在訪問量比較大的情況下可以分擔(dān)主服務(wù)器的壓力2009-01-01JavaScript必知必會(六) delete in instanceof
這篇文章主要介紹了JavaScript必知必會(六) delete in instanceof的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-06-06For循環(huán)中分號隔開的3部分的執(zhí)行順序探討
這篇文章主要探討了For循環(huán)中分號隔開的3部分的執(zhí)行順序,需要的朋友可以參考下2014-05-05javascript數(shù)據(jù)結(jié)構(gòu)之串的概念與用法分析
這篇文章主要介紹了javascript數(shù)據(jù)結(jié)構(gòu)之串的概念與用法,簡單講述了串的概念、功能并結(jié)合實(shí)例形式分析了基于javascript實(shí)現(xiàn)串的遍歷、比較、查找等相關(guān)操作技巧,需要的朋友可以參考下2017-04-04