這篇文章主要介紹了使用JavaScript實現循環輪播圖的案例,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
具體內容如下

1.點擊下面圖標,圖片進行輪播
2.圖片輪播完,接著輪播到第一張
(代碼內部具有詳細解釋)

HTML代碼:
<!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> <!-- 重復顯示第一張圖片,便于切入下一輪循環。 --> <li><img src="img/1.jpg" /></li> </ul> <!-- 導航按鈕 --> <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代碼:
* {
margin: 0;
padding: 0;
}
/*
* 設置outer的樣式
*/
#outer {
/*設置寬和高*/
width: 520px;
height: 333px;
/*居中*/
margin: 50px auto;
/*設置背景顏色*/
background-color: orange;
/*設置padding*/
padding: 10px 0;
/*開啟相對定位*/
position: relative;
/*裁剪溢出的內容*/
overflow: hidden;
}
/*設置圖片列表*/
#img-list {
/*去除項目符號*/
list-style: none;
/*設置ul的寬度*/
/*width: 2600px;*/
/*開啟絕對定位*/
position: absolute;
/*設置偏移量(每向左移動520px,就會顯示到下一張圖片)*/
left: 0px;
}
/*設置圖片中的li*/
#img-list li {
/*設置浮動*/
float: left;
/*設置左右外邊距*/
margin: 0 10px;
}
/*設置導航按鈕*/
#nav-btns {
/*開啟絕對定位*/
position: absolute;
/*設置位置*/
bottom: 15px;
}
#nav-btns a {
/*設置超鏈接浮動*/
float: left;
/*設置超鏈接的寬和高*/
width: 15px;
height: 15px;
/*設置背景顏色*/
background-color: red;
/*設置左右外邊距*/
margin: 0 5px;
/*設置透明*/
opacity: 0.5;
/*兼容IE8透明*/
filter: alpha(opacity=50);
}
/*設置鼠標移入的效果*/
#nav-btns a:hover {
background-color: black;
}lunbo.js代碼
window.onload = function() {
// 獲取圖片列表
var imgList = document.getElementById("img-list");
// 獲取頁面中所有的img標簽
var imgArr = document.getElementsByTagName("img");
// 設置imgList的寬度
imgList.style.width = 520 * imgArr.length + "px";
// 設置導航按鈕居中
// 獲取導航按鈕
var navBtns = document.getElementById("nav-btns");
// 獲取outer
var outer = document.getElementById("outer");
// 設置navBtns的left值
navBtns.style.left = (outer.offsetWidth - navBtns.offsetWidth) / 2 + "px";
// 默認顯示圖片的索引
var index = 0;
// 獲取所有的a
var allA = document.getElementsByTagName("a");
// 設置默認選中的效果
allA[index].style.backgroundColor = "black";
/*
* 點擊超鏈接切換到指定的圖片
* 點擊第一個超鏈接,顯示第一個圖片
* 點擊第二個超鏈接,顯示第二個圖片
* */
// 為所有的超鏈接都綁定單擊響應函數
for (var i = 0; i < allA.length; i++) {
// 為每一個超鏈接都添加一個num屬性
allA[i].num = i;
// 為超鏈接綁定單擊響應函數
allA[i].onclick = function() {
// 關閉自動切換的定時器
clearInterval(timer);
// 獲取點擊超鏈接的索引,并將其設置為index
index = this.num;
// 設置選中的a
setA();
// 使用move函數來切換圖片
move(imgList, "left", -520 * index, 20, function() {
// 動畫執行完畢,開啟自動切換
autoChange();
});
};
}
// 開啟自動切換圖片
autoChange();
// 設置選中的a
function setA() {
// 判斷當前索引是否是最后一張圖片
if (index >= imgArr.length - 1) {
// 則將index設置為0
index = 0;
// 此時顯示的最后一張圖片,而最后一張圖片和第一張是一摸一樣
// 通過CSS將最后一張切換成第一張
imgList.style.left = 0;
}
// 遍歷所有a,并將它們的背景顏色設置為紅色
for (var i = 0; i < allA.length; i++) {
allA[i].style.backgroundColor = "";
}
// 將選中的a設置為黑色
allA[index].style.backgroundColor = "black";
};
// 定義一個自動切換的定時器的標識
var timer;
// 創建一個函數,用來開啟自動切換圖片
function autoChange() {
// 開啟一個定時器,用來定時去切換圖片
timer = setInterval(function() {
// 使索引自增
index++;
// 判斷index的值
index %= imgArr.length;
// 執行動畫,切換圖片
move(imgList, "left", -520 * index, 20, function() {
// 修改導航按鈕
setA();
});
}, 3000);
}
};tool.js代碼:
/*
* 創建一個可以執行簡單動畫的函數
* 參數:
* obj:要執行動畫的對象
* attr:要執行動畫的樣式,比如:left top width height
* target:執行動畫的目標位置
* speed:移動的速度(正數向右移動,負數向左移動)
* callback:回調函數,這個函數將會在動畫執行完畢以后執行
*/
function move(obj, attr, target, speed, callback) {
// 關閉上一個定時器
clearInterval(obj.timer);
// 獲取元素目前的位置
var current = parseInt(getStyle(obj, attr));
// 判斷速度的正負值
// 如果從0 向 800移動,則speed為正
// 如果從800向0移動,則speed為負
if (current > target) {
//此時速度應為負值
speed = -speed;
}
// 開啟一個定時器,用來執行動畫效果
// 向執行動畫的對象中添加一個timer屬性,用來保存它自己的定時器的標識
obj.timer = setInterval(function() {
// 獲取box1的原來的left值
var oldValue = parseInt(getStyle(obj, attr));
// 在舊值的基礎上增加
var newValue = oldValue + speed;
// 判斷newValue是否大于800
// 從800 向 0移動
// 向左移動時,需要判斷newValue是否小于target
// 向右移動時,需要判斷newValue是否大于target
if ((speed < 0 && newValue < target) || (speed > 0 && newValue > target)) {
newValue = target;
}
// 將新值設置給box1
obj.style[attr] = newValue + "px";
// 當元素移動到0px時,使其停止執行動畫
if (newValue == target) {
// 達到目標,關閉定時器
clearInterval(obj.timer);
// 動畫執行完畢,調用回調函數
callback && callback();
}
}, 30);
}
/*
* 定義一個函數,用來獲取指定元素的當前的樣式
* 參數:
* obj 要獲取樣式的元素
* name 要獲取的樣式名
*/
function getStyle(obj, name) {
if (window.getComputedStyle) {
// 正常瀏覽器的方式,具有getComputedStyle()方法
return getComputedStyle(obj, null)[name];
} else {
// IE8的方式,沒有getComputedStyle()方法
return obj.currentStyle[name];
}
}
/*
* 定義一個函數,用來向一個元素中添加指定的class屬性值
* 參數:
* 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
// 創建一個正則表達式
var reg = new RegExp("\\b" + cn + "\\b");
return reg.test(obj.className);
}
/*
* 刪除一個元素中的指定的class屬性
*/
function removeClass(obj, cn) {
// 創建一個正則表達式
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);
}
}圖片資源下面:





感謝你能夠認真閱讀完這篇文章,希望小編分享的“使用JavaScript實現循環輪播圖的案例”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。