JavaScript實(shí)現(xiàn)簡(jiǎn)單的輪播圖效果
輪播圖是什么?
輪播圖:在一個(gè)模塊或者說(shuō)窗口,通過(guò)電腦上鼠標(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頁(yè)面,這個(gè)結(jié)構(gòu)很簡(jiǎn)單,用一個(gè)大的div嵌套兩個(gè)div,取個(gè)名字叫slider,上面的div用來(lái)裝圖片,取個(gè)名字叫slider-img,下面的div就是控件,用來(lái)裝上下張圖片的按鈕和小圓點(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代碼
首先需要做一波需求分析,能夠理清思路,然后在來(lái)一步一步的寫代碼。我們先獲取相關(guān)的元素,然后根據(jù)圖片數(shù)量生成對(duì)應(yīng)的小圓點(diǎn),由于圖片是堆疊在一起的,我們把其他的圖都放到右邊隱藏起來(lái),顯示第一張圖片即可。隨后需要點(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)左右無(wú)縫輪播圖代碼
- 使用html+js+css 實(shí)現(xiàn)頁(yè)面輪播圖效果(實(shí)例講解)
- 原生js實(shí)現(xiàn)無(wú)限循環(huán)輪播圖效果
- js實(shí)現(xiàn)從左向右滑動(dòng)式輪播圖效果
相關(guān)文章
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方
本篇文章主要介紹了javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法)需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12
開發(fā) Internet Explorer 右鍵功能表(ContextMenu)
本篇介紹如何開發(fā) Internet Explorer 右鍵功能表(ContextMenu),以 0rz.tw 縮短網(wǎng)址列為范例2013-07-07
在網(wǎng)頁(yè)里看flash的trace數(shù)據(jù)的js類
我的js類jdhcn.js中的一個(gè)flashDebug方法2009-01-01
JavaScript隊(duì)列結(jié)構(gòu)Queue實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了JavaScript隊(duì)列結(jié)構(gòu)Queue實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Bootstrap基本組件學(xué)習(xí)筆記之下拉菜單(7)
這篇文章主要為大家詳細(xì)介紹了Bootstrap基本組件學(xué)習(xí)筆記之下拉菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
window.location.href IE下跳轉(zhuǎn)失效的解決方法
這篇文章主要介紹了window.location.href IE下跳轉(zhuǎn)失效的解決方法,需要的朋友可以參考下2014-03-03

