本文實例為大家分享了JavaScript實現(xiàn)循環(huán)輪播圖的具體代碼,供大家參考,具體內(nèi)容如下
案例演示:
1.點擊下面圖標(biāo),圖片進行輪播
2.圖片輪播完,接著輪播到第一張
(代碼內(nèi)部具有詳細解釋)
項目結(jié)構(gòu)圖:
HTML代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<!DOCTYPE html> < html > < head > < meta charset = "utf-8" /> < title >圖片輪播示例</ title > < link rel = "stylesheet" href = "css/lunbo.css" /> < script src = "js/tools.js" ></ script > < script src = "js/lunbo.js" ></ script > </ head > < body > <!-- 外部容器 --> < div id = "outer" > <!-- 圖片列表 --> < ul id = "img-list" > < li >< img src = "img/1.jpg" /></ li > < li >< img src = "img/2.jpg" /></ li > < li >< img src = "img/3.jpg" /></ li > < li >< img src = "img/4.jpg" /></ li > < li >< img src = "img/5.jpg" /></ li > <!-- 重復(fù)顯示第一張圖片,便于切入下一輪循環(huán)。 --> < li >< img src = "img/1.jpg" /></ li > </ ul > <!-- 導(dǎo)航按鈕 --> < div id = "nav-btns" > < a href = "javascript:;" ></ a > < a href = "javascript:;" ></ a > < a href = "javascript:;" ></ a > < a href = "javascript:;" ></ a > < a href = "javascript:;" ></ a > </ div > </ div > </ body > </ html > |
css代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
* { margin : 0 ; padding : 0 ; } /* * 設(shè)置outer的樣式 */ #outer { /*設(shè)置寬和高*/ width : 520px ; height : 333px ; /*居中*/ margin : 50px auto ; /*設(shè)置背景顏色*/ background-color : orange; /*設(shè)置padding*/ padding : 10px 0 ; /*開啟相對定位*/ position : relative ; /*裁剪溢出的內(nèi)容*/ overflow : hidden ; } /*設(shè)置圖片列表*/ #img-list { /*去除項目符號*/ list-style : none ; /*設(shè)置ul的寬度*/ /*width: 2600px;*/ /*開啟絕對定位*/ position : absolute ; /*設(shè)置偏移量(每向左移動520px,就會顯示到下一張圖片)*/ left : 0px ; } /*設(shè)置圖片中的li*/ #img-list li { /*設(shè)置浮動*/ float : left ; /*設(shè)置左右外邊距*/ margin : 0 10px ; } /*設(shè)置導(dǎo)航按鈕*/ #nav-btns { /*開啟絕對定位*/ position : absolute ; /*設(shè)置位置*/ bottom : 15px ; } #nav-btns a { /*設(shè)置超鏈接浮動*/ float : left ; /*設(shè)置超鏈接的寬和高*/ width : 15px ; height : 15px ; /*設(shè)置背景顏色*/ background-color : red ; /*設(shè)置左右外邊距*/ margin : 0 5px ; /*設(shè)置透明*/ opacity: 0.5 ; /*兼容IE8透明*/ filter: alpha(opacity= 50 ); } /*設(shè)置鼠標(biāo)移入的效果*/ #nav-btns a:hover { background-color : black ; } |
lunbo.js代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
window.onload = function () { // 獲取圖片列表 var imgList = document.getElementById( "img-list" ); // 獲取頁面中所有的img標(biāo)簽 var imgArr = document.getElementsByTagName( "img" ); // 設(shè)置imgList的寬度 imgList.style.width = 520 * imgArr.length + "px" ; // 設(shè)置導(dǎo)航按鈕居中 // 獲取導(dǎo)航按鈕 var navBtns = document.getElementById( "nav-btns" ); // 獲取outer var outer = document.getElementById( "outer" ); // 設(shè)置navBtns的left值 navBtns.style.left = (outer.offsetWidth - navBtns.offsetWidth) / 2 + "px" ; // 默認(rèn)顯示圖片的索引 var index = 0; // 獲取所有的a var allA = document.getElementsByTagName( "a" ); // 設(shè)置默認(rèn)選中的效果 allA[index].style.backgroundColor = "black" ; /* * 點擊超鏈接切換到指定的圖片 * 點擊第一個超鏈接,顯示第一個圖片 * 點擊第二個超鏈接,顯示第二個圖片 * */ // 為所有的超鏈接都綁定單擊響應(yīng)函數(shù) for ( var i = 0; i < allA.length; i++) { // 為每一個超鏈接都添加一個num屬性 allA[i].num = i; // 為超鏈接綁定單擊響應(yīng)函數(shù) allA[i].onclick = function () { // 關(guān)閉自動切換的定時器 clearInterval(timer); // 獲取點擊超鏈接的索引,并將其設(shè)置為index index = this .num; // 設(shè)置選中的a setA(); // 使用move函數(shù)來切換圖片 move(imgList, "left" , -520 * index, 20, function () { // 動畫執(zhí)行完畢,開啟自動切換 autoChange(); }); }; } // 開啟自動切換圖片 autoChange(); // 設(shè)置選中的a function setA() { // 判斷當(dāng)前索引是否是最后一張圖片 if (index >= imgArr.length - 1) { // 則將index設(shè)置為0 index = 0; // 此時顯示的最后一張圖片,而最后一張圖片和第一張是一摸一樣 // 通過CSS將最后一張切換成第一張 imgList.style.left = 0; } // 遍歷所有a,并將它們的背景顏色設(shè)置為紅色 for ( var i = 0; i < allA.length; i++) { allA[i].style.backgroundColor = "" ; } // 將選中的a設(shè)置為黑色 allA[index].style.backgroundColor = "black" ; }; // 定義一個自動切換的定時器的標(biāo)識 var timer; // 創(chuàng)建一個函數(shù),用來開啟自動切換圖片 function autoChange() { // 開啟一個定時器,用來定時去切換圖片 timer = setInterval( function () { // 使索引自增 index++; // 判斷index的值 index %= imgArr.length; // 執(zhí)行動畫,切換圖片 move(imgList, "left" , -520 * index, 20, function () { // 修改導(dǎo)航按鈕 setA(); }); }, 3000); } }; |
tool.js代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
/* * 創(chuàng)建一個可以執(zhí)行簡單動畫的函數(shù) * 參數(shù): * obj:要執(zhí)行動畫的對象 * attr:要執(zhí)行動畫的樣式,比如:left top width height * target:執(zhí)行動畫的目標(biāo)位置 * speed:移動的速度(正數(shù)向右移動,負數(shù)向左移動) * callback:回調(diào)函數(shù),這個函數(shù)將會在動畫執(zhí)行完畢以后執(zhí)行 */ function move(obj, attr, target, speed, callback) { // 關(guān)閉上一個定時器 clearInterval(obj.timer); // 獲取元素目前的位置 var current = parseInt(getStyle(obj, attr)); // 判斷速度的正負值 // 如果從0 向 800移動,則speed為正 // 如果從800向0移動,則speed為負 if (current > target) { //此時速度應(yīng)為負值 speed = -speed; } // 開啟一個定時器,用來執(zhí)行動畫效果 // 向執(zhí)行動畫的對象中添加一個timer屬性,用來保存它自己的定時器的標(biāo)識 obj.timer = setInterval( function () { // 獲取box1的原來的left值 var oldValue = parseInt(getStyle(obj, attr)); // 在舊值的基礎(chǔ)上增加 var newValue = oldValue + speed; // 判斷newValue是否大于800 // 從800 向 0移動 // 向左移動時,需要判斷newValue是否小于target // 向右移動時,需要判斷newValue是否大于target if ((speed < 0 && newValue < target) || (speed > 0 && newValue > target)) { newValue = target; } // 將新值設(shè)置給box1 obj.style[attr] = newValue + "px" ; // 當(dāng)元素移動到0px時,使其停止執(zhí)行動畫 if (newValue == target) { // 達到目標(biāo),關(guān)閉定時器 clearInterval(obj.timer); // 動畫執(zhí)行完畢,調(diào)用回調(diào)函數(shù) callback && callback(); } }, 30); } /* * 定義一個函數(shù),用來獲取指定元素的當(dāng)前的樣式 * 參數(shù): * obj 要獲取樣式的元素 * name 要獲取的樣式名 */ function getStyle(obj, name) { if (window.getComputedStyle) { // 正常瀏覽器的方式,具有g(shù)etComputedStyle()方法 return getComputedStyle(obj, null )[name]; } else { // IE8的方式,沒有g(shù)etComputedStyle()方法 return obj.currentStyle[name]; } } /* * 定義一個函數(shù),用來向一個元素中添加指定的class屬性值 * 參數(shù): * obj 要添加class屬性的元素 * cn 要添加的class值 */ function addClass(obj, cn) { // 檢查obj中是否含有cn if (!hasClass(obj, cn)) { obj.className += " " + cn; } } /* * 判斷一個元素中是否含有指定的class屬性值, * 如果有該class,則返回true,沒有則返回false。 */ function hasClass(obj, cn) { // 判斷obj中有沒有cn class // 創(chuàng)建一個正則表達式 var reg = new RegExp( "\\b" + cn + "\\b" ); return reg.test(obj.className); } /* * 刪除一個元素中的指定的class屬性 */ function removeClass(obj, cn) { // 創(chuàng)建一個正則表達式 var reg = new RegExp( "\\b" + cn + "\\b" ); // 刪除class obj.className = obj.className.replace(reg, "" ); } /* * toggleClass可以用來切換一個類 * 如果元素中具有該類,則刪除 * 如果元素中沒有該類,則添加 */ function toggleClass(obj, cn) { //判斷obj中是否含有cn if (hasClass(obj, cn)) { //有,則刪除 removeClass(obj, cn); } else { //沒有,則添加 addClass(obj, cn); } } |
圖片資源下面:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/qq_42881159/article/details/115549528