JavaScript實(shí)現(xiàn)簡(jiǎn)單的輪播圖效果
輪播圖是什么?
輪播圖:在一個(gè)模塊或者說窗口,通過電腦上鼠標(biāo)點(diǎn)擊、手機(jī)上手指滑動(dòng)后,可以看到多張圖片。這些圖片就都是輪播圖,這個(gè)模塊就叫做輪播模塊。
如何實(shí)現(xiàn)輪播圖
如何才能在js里面做成一個(gè)輪播圖呢,比如下面這種的,可以自動(dòng)生成圖片對(duì)應(yīng)的小圓點(diǎn)、點(diǎn)擊左右箭頭可以跳到上或下一張圖片、每隔幾秒自動(dòng)輪播,還可以點(diǎn)擊小小圓點(diǎn)去到指定的圖片。
HTML結(jié)構(gòu)
首先我們創(chuàng)建一個(gè)HTML頁面,這個(gè)結(jié)構(gòu)很簡(jiǎn)單,用一個(gè)大的div嵌套兩個(gè)div,取個(gè)名字叫slider,上面的div用來裝圖片,取個(gè)名字叫slider-img,下面的div就是控件,用來裝上下張圖片的按鈕和小圓點(diǎn),這個(gè)就叫做slider-ctrl。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="css/index.css"/> <script src="../public.js"></script> <script src="./js/index.js"></script> </head> <body> <div class="slider" id="slider"> <div class="slider-img"> <ul> <li><a href="#"><img src="images/1.jpg" alt=""/></a></li> <li><a href="#"><img src="images/2.jpg" alt=""/></a></li> <li><a href="#"><img src="images/3.jpg" alt=""/></a></li> <li><a href="#"><img src="images/4.jpg" alt=""/></a></li> <li><a href="#"><img src="images/5.jpg" alt=""/></a></li> <li><a href="#"><img src="images/6.jpg" alt=""/></a></li> </ul> </div> <div class="slider-ctrl"> //在這里自動(dòng)生成小圓點(diǎn) <span class="prev" id="prev"></span> <span class="next" id="next"></span> </div> </div> </body> </html>
CSS代碼
css代碼非常簡(jiǎn)單,略。
* { margin: 0; padding: 0; } .slider { width: 310px; height: 265px; margin: 100px auto; position: relative; overflow: hidden; } .slider-img { width: 310px; height: 220px; } ul { list-style: none; } li { position: absolute; top: 0; left: 0; } .slider-ctrl { text-align: center; padding-top: 10px; } .slider-ctrl-con { display: inline-block; width: 24px; height: 24px; background: url(../images/icon.png) no-repeat -24px -780px; text-indent: -99999px; margin: 0 5px; cursor: pointer; } .slider-ctrl-con.current { background-position: -24px -760px; } .prev,.next { position: absolute; top: 40%; width: 30px; height: 35px; background: url(../images/icon.png) no-repeat; } .prev { left: 10px; } .next { right: 10px; background-position: 0 -44px; }
js代碼
首先需要做一波需求分析,能夠理清思路,然后在來一步一步的寫代碼。我們先獲取相關(guān)的元素,然后根據(jù)圖片數(shù)量生成對(duì)應(yīng)的小圓點(diǎn),由于圖片是堆疊在一起的,我們把其他的圖都放到右邊隱藏起來,顯示第一張圖片即可。隨后需要點(diǎn)亮第一個(gè)小圓點(diǎn),保證小圓點(diǎn)和圖片是綁定在一起的。然后我們需要實(shí)現(xiàn)點(diǎn)擊右箭頭看到下一張圖,點(diǎn)擊左箭頭看到上一張圖,點(diǎn)擊小圓點(diǎn)可以顯示對(duì)應(yīng)的圖片,且都要點(diǎn)亮相對(duì)于的圖片。最后就是讓他自動(dòng)輪播圖片,鼠標(biāo)移入時(shí)停止輪播,鼠標(biāo)移出時(shí)繼續(xù)輪播
window.onload = function(){ // 0 獲取相關(guān)元素 // 總?cè)萜? var slider = document.getElementById('slider'); // 所有圖片li的集合 var imgLiS = slider.children[0].children[0].children; // 控制按鈕的容器 var ctrlDiv = slider.children[1]; // 左箭頭(上一張按鈕) var prev = document.getElementById('prev') // 右箭頭(下一張按鈕) var next = document.getElementById('next') // 容器的寬度 var width = slider.offsetWidth; // 用一個(gè)變量記錄當(dāng)前顯示的圖片的索引 var index = 0; // 1 根據(jù)圖片數(shù)量生成對(duì)應(yīng)的小圓點(diǎn) for(var i=imgLiS.length-1;i>=0;i--){ var newPoint = document.createElement('span'); // 給每個(gè)節(jié)點(diǎn)里面記錄他是第幾個(gè)節(jié)點(diǎn),方便后期點(diǎn)擊時(shí)候知道是第幾個(gè) newPoint.className = "slider-ctrl-con"; newPoint.innerHTML = i; // 放到最前面 ctrlDiv.insertBefore(newPoint,ctrlDiv.children[0]) // 2 所有的圖片都放到右邊 imgLiS[i].style.left = width+"px" } // 2 輪播圖顯示第一幅圖 imgLiS[index].style.left = 0; // 獲取所有的小圓點(diǎn) var ctrlS = ctrlDiv.children; // 3 點(diǎn)亮第一個(gè)小圓點(diǎn) light() // 4 點(diǎn)擊左箭頭可以看前一幅圖,點(diǎn)亮對(duì)應(yīng)的小圓點(diǎn) prev.onclick = prevImg; // 5 點(diǎn)擊右箭頭可以看后一幅圖,點(diǎn)亮對(duì)應(yīng)的小圓點(diǎn) next.onclick = nextImg; // 6 點(diǎn)擊小圓點(diǎn),點(diǎn)亮這個(gè)小圓點(diǎn),并顯示對(duì)應(yīng)的圖片 for(var i=0;i<imgLiS.length;i++){ ctrlS[i].onclick = function(){ var num = +this.innerHTML; if(num>index){ // 我認(rèn)為后面的圖在右邊 imgLiS[num].style.left = width+"px"; // 當(dāng)前圖去左邊 move(imgLiS[index],'left',-width) // 我要看的圖去中間 move(imgLiS[num],'left',0) } if(num<index){ // 我認(rèn)為前面的圖在左邊 imgLiS[num].style.left = -width+"px"; // 當(dāng)前圖去右邊 move(imgLiS[index],'left',width) // 我要看的圖去中間 move(imgLiS[num],'left',0) } // 更新index index = num; // 點(diǎn)亮小圓點(diǎn) light() } } // 7 可以自動(dòng)輪播圖: 每隔3秒看下一張 var timer = setInterval(nextImg,3000) // 8 鼠標(biāo)移入停止輪播 slider.onmouseenter = function(){ clearInterval(timer) } // 9 鼠標(biāo)移出繼續(xù)輪播 slider.onmouseleave = function(){ clearInterval(timer) timer = setInterval(nextImg,3000) } // 由于點(diǎn)亮小圓點(diǎn)多次執(zhí)行,封裝成函數(shù) function light(){ for(var i=0;i<imgLiS.length;i++){ ctrlS[i].className = "slider-ctrl-con" } ctrlS[index].className = "slider-ctrl-con current" } // 看上一張圖的函數(shù) function prevImg(){ var num = index-1; if(num<0){ // 索引最小是0,如果要看的索引比0小,就是最后一張,也就是第length-1張 num = imgLiS.length-1; } // 我認(rèn)為前一張圖一定在左邊 imgLiS[num].style.left = -width+"px"; // 當(dāng)前圖片運(yùn)動(dòng)到右邊 move(imgLiS[index],'left',width) // 要看的圖片運(yùn)動(dòng)到中間 move(imgLiS[num],'left',0) // 運(yùn)動(dòng)完成以后容器里面顯示的是num這個(gè)圖 // 所以記錄當(dāng)前索引的index里面的值變成num index = num; light() } // 看下一張圖的函數(shù) function nextImg(){ var num = index + 1; if(num>imgLiS.length-1){ num = 0; } // 我認(rèn)為下一張一定在右邊 imgLiS[num].style.left = width+"px"; // 當(dāng)前圖片去左邊 move(imgLiS[index],'left',-width) // 我要看的下一張去中間 move(imgLiS[num],'left',0) // 更新index的值 index = num; light() } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js實(shí)現(xiàn)輪播圖的完整代碼
- 原生js實(shí)現(xiàn)輪播圖的示例代碼
- js實(shí)現(xiàn)支持手機(jī)滑動(dòng)切換的輪播圖片效果實(shí)例
- JS輪播圖實(shí)現(xiàn)簡(jiǎn)單代碼
- js實(shí)現(xiàn)點(diǎn)擊左右按鈕輪播圖片效果實(shí)例
- JS實(shí)現(xiàn)自動(dòng)輪播圖效果(自適應(yīng)屏幕寬度+手機(jī)觸屏滑動(dòng))
- JS實(shí)現(xiàn)左右無縫輪播圖代碼
- 使用html+js+css 實(shí)現(xiàn)頁面輪播圖效果(實(shí)例講解)
- 原生js實(shí)現(xiàn)無限循環(huán)輪播圖效果
- js實(shí)現(xiàn)從左向右滑動(dòng)式輪播圖效果
相關(guān)文章
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方
本篇文章主要介紹了javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法)需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12開發(fā) Internet Explorer 右鍵功能表(ContextMenu)
本篇介紹如何開發(fā) Internet Explorer 右鍵功能表(ContextMenu),以 0rz.tw 縮短網(wǎng)址列為范例2013-07-07在網(wǎng)頁里看flash的trace數(shù)據(jù)的js類
我的js類jdhcn.js中的一個(gè)flashDebug方法2009-01-01JavaScript隊(duì)列結(jié)構(gòu)Queue實(shí)現(xiàn)過程解析
這篇文章主要介紹了JavaScript隊(duì)列結(jié)構(gòu)Queue實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Bootstrap基本組件學(xué)習(xí)筆記之下拉菜單(7)
這篇文章主要為大家詳細(xì)介紹了Bootstrap基本組件學(xué)習(xí)筆記之下拉菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12window.location.href IE下跳轉(zhuǎn)失效的解決方法
這篇文章主要介紹了window.location.href IE下跳轉(zhuǎn)失效的解決方法,需要的朋友可以參考下2014-03-03