JavaScript實現循環輪播圖
本文實例為大傢分享瞭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); } }
圖片資源下面:
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- None Found