JavaScript實(shí)現(xiàn)簡(jiǎn)易輪播圖最全代碼解析(ES5)
本文實(shí)例為大家分享了JavaScript實(shí)現(xiàn)簡(jiǎn)易輪播圖效果的具體代碼,供大家參考,具體內(nèi)容如下
全部代碼:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ES5輪播圖</title> <style> * {padding: 0;margin: 0;} #wrapper { position: relative; margin: 50px auto; padding: 0; width: 1000px; height: 300px; } #wrapper .content { position: relative; width: 100%; height: 100%; overflow: hidden; } #wrapper>.content>.imgs { position: absolute; margin: 0; padding: 0; left: 0; top: 0; width: 6000px; /*多留出一張圖片的寬度!*/ list-style: none; } #wrapper>.content>.imgs li { float: left; margin: 0; padding: 0; width: 1000px; height: 300px; } #wrapper>.content>.imgs>li img { width: 100%; height: 100%; } #wrapper>.content>.dots { width: 163px; position: absolute; right: 0; left: 0; margin: auto; bottom: 10px; list-style: none; } #wrapper>.content>.dots li { float: left; width: 20px; height: 20px; text-align: center; line-height: 20px; border-radius: 50%; margin-left: 10px; cursor: pointer; } li.active { background-color: white; } li.quiet { background-color: #5a5a58; } .btns { display: none; } .btns span { position: absolute; width: 25px; height: 40px; top: 50%; margin-top: -20px; line-height: 40px; text-align: center; font-weight: bold; font-family: Simsun; font-size: 30px; border: 1px solid #fff; opacity: 0.5; cursor: pointer; color: #fff; background: black; } .btns .left { left: 5px; } .btns .right { left: 100%; margin-left: -32px; } </style> </head> <body> <div id="wrapper"> <div class="content"> <ul class="imgs"> <li><img src="img/s1.jpg" /></li> <li><img src="img/s2.jpg" /></li> <li><img src="img/s3.jpg" /></li> <li><img src="img/s4.jpg" /></li> <li><img src="img/s5.jpg" /></li> </ul> <ul class='dots'></ul> </div> <div class="btns"> <span class="left"><</span> <span class="right">></span> </div> </div> </body> </html> <script> var wrapper = document.getElementById("wrapper"); var imgs = document.getElementsByClassName("imgs")[0]; var dots = document.getElementsByClassName("dots")[0]; var btns = document.getElementsByClassName("btns")[0]; var dotss = dots.children; var len = imgs.children.length; //圖片張數(shù) var width = wrapper.offsetWidth; //每張圖片的寬度 var rate = 15; //一張圖片的切換速度, 單位為px var times = 1; //切換速度的倍率 var timer = null; //初始化一個(gè)定時(shí)器 var imgSub = 0; //當(dāng)前顯示的圖片下標(biāo) var dotSub = 0; //當(dāng)前顯示圖片的小圓點(diǎn)下標(biāo) var temp; // 創(chuàng)建一個(gè)文檔片段,此時(shí)還沒(méi)有插入到 DOM 結(jié)構(gòu)中 const frag = document.createDocumentFragment() // 根據(jù)圖片數(shù)量添加相應(yīng)的小圓點(diǎn)到文檔片段中 for (let i = 0; i < len; i++) { const dot = document.createElement("li"); dot.className = 'quiet'; // 先插入文檔片段中 frag.appendChild(dot); } // 將小圓點(diǎn)片段統(tǒng)一插入到 DOM 結(jié)構(gòu)中 dots.appendChild(frag) // 第一個(gè)小圓點(diǎn)高亮顯示 dots.children[0].className = "active"; // 滑動(dòng)函數(shù) function Roll(distance) { //參數(shù)distance:滾動(dòng)的目標(biāo)點(diǎn)(必為圖片寬度的倍數(shù)) clearInterval(imgs.timer); //每次運(yùn)行該函數(shù)必須清除之前的定時(shí)器! //判斷圖片移動(dòng)的方向 var speed = imgs.offsetLeft < distance ? rate : (0 - rate); //設(shè)置定時(shí)器,每隔10毫秒,調(diào)用一次該匿名函數(shù) imgs.timer = setInterval(function() { //每一次調(diào)用滾動(dòng)到的地方 (速度為 speed px/10 ms) imgs.style.left = imgs.offsetLeft + speed + "px"; //距目標(biāo)點(diǎn)剩余的px值 var leave = distance - imgs.offsetLeft; /*接近目標(biāo)點(diǎn)時(shí)的處理,滾動(dòng)接近目標(biāo)時(shí)直接到達(dá), 避免rate值設(shè)置不當(dāng)時(shí)不能完整顯示圖片*/ if (Math.abs(leave) <= Math.abs(speed)) { clearInterval(imgs.timer); imgs.style.left = distance + "px"; } }, 10); } /*克隆第一個(gè)li到列表末*/ imgs.appendChild(imgs.children[0].cloneNode(true)); function autoRun() { imgSub++; dotSub++; if (imgSub > len) { //滾動(dòng)完克隆項(xiàng)后 imgs.style.left = 0; //改變left至真正的第一項(xiàng)處 imgSub = 1; //從第二張開(kāi)始顯示 } // 調(diào)用滾動(dòng)函數(shù),參數(shù)為該下標(biāo)的滾動(dòng)距離 Roll(-imgSub * width); // 如果圓點(diǎn)下標(biāo)已滾動(dòng)到最后,則將下標(biāo)重置為0 if (dotSub > len - 1) { //判斷是否到了最后一個(gè)圓點(diǎn) dotSub = 0; } // 循環(huán)修改所有圓點(diǎn)默認(rèn)樣式 for (var i = 0; i < len; i++) { dotss[i].className = "quiet"; } // 給當(dāng)前滾動(dòng)到的圓點(diǎn)添加高亮樣式 dotss[dotSub].className = "active"; } // 創(chuàng)建定時(shí)器,開(kāi)始自動(dòng)滾動(dòng) timer = setInterval(autoRun,2000); // 循環(huán)添加小圓點(diǎn)的觸發(fā)事件 for (var i = 0; i < len; i++) { dotss[i].index = i; dotss[i].onmouseover = function() { for (var j = 0; j < len; j++) { dotss[j].className = "quiet"; } this.className = "active"; temp = dotSub; imgSub = dotSub = this.index; times = Math.abs(this.index - temp); //距離上個(gè)小圓點(diǎn)的距離 rate = rate * times; //根據(jù)距離改變切換速率 Roll(-this.index * width); rate = 15; } } // 添加事件:鼠標(biāo)移動(dòng)到wrapper上,左右切換按鈕顯示 wrapper.onmouseover = function() { clearInterval(timer); btns.style.display = 'block'; } // 添加事件:鼠標(biāo)移出wrapper,左右切換按鈕隱藏 wrapper.onmouseout = function() { timer = setInterval(autoRun,2000); btns.style.display = 'none'; } // 點(diǎn)擊上一張按鈕 觸發(fā)事件 btns.children[0].onclick = function() { imgSub--; dotSub--; if (imgSub < 0) { //滾動(dòng)完第一項(xiàng)后 imgs.style.left = -len * width + "px"; //改變left至克隆的第一項(xiàng)處 imgSub = dotSub = len - 1; } Roll(-imgSub * width); if (dotSub < 0) { dotSub = len - 1; } for (var i = 0; i < len; i++) { dotss[i].className = "quiet"; } dotss[dotSub].className = "active"; } // 點(diǎn)擊下一張按鈕 觸發(fā)事件 btns.children[1].onclick = autoRun; </script>
圖片:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Javascript的ES5,ES6的7種繼承詳解
- 詳解JavaScript之ES5的繼承
- js定義類(lèi)的方法示例【ES5與ES6】
- 詳解vue-cli+es6引入es5寫(xiě)的js(兩種方法)
- JS實(shí)現(xiàn)集合的交集、補(bǔ)集、差集、去重運(yùn)算示例【ES5與ES6寫(xiě)法】
- JavaScript設(shè)計(jì)模式之原型模式分析【ES5與ES6】
- js es6系列教程 - 基于new.target屬性與es5改造es6的類(lèi)語(yǔ)法
- JavaScript ES5標(biāo)準(zhǔn)中新增的Array方法
- JS?ES5創(chuàng)建常量詳解
相關(guān)文章
CocosCreator Typescript制作俄羅斯方塊游戲
目前關(guān)于cocos開(kāi)發(fā)俄羅斯方塊的文章幾乎寥寥無(wú)幾,因此本文將主要介紹如何通過(guò)CocosCreator Typescript制作簡(jiǎn)單的俄羅斯方塊游戲,代碼具有一定價(jià)值,感興趣的同學(xué)可以學(xué)習(xí)一下2021-11-11php gethostbyname獲取域名ip地址函數(shù)詳解
php gethostbyname獲取域名ip地址函數(shù),需要根據(jù)域名得到ip地址的朋友有福了。2010-01-01JavaScript惰性載入函數(shù)實(shí)例分析
這篇文章主要介紹了JavaScript惰性載入函數(shù),結(jié)合實(shí)例形式分析了JavaScript惰性載入函數(shù)的概念、原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-03-03前端實(shí)現(xiàn)(excel)xlsx文件預(yù)覽的詳細(xì)步驟
excel的預(yù)覽庫(kù)有不少,也都很強(qiáng)大,但是能很簡(jiǎn)單實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于前端實(shí)現(xiàn)(excel)xlsx文件預(yù)覽的詳細(xì)步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03JavaScript lodash常見(jiàn)用法系列小結(jié)
本篇文章主要介紹了JavaScript lodash用法小結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,對(duì)于Javascript lodash教程感興趣的同學(xué)可以參考一下2016-08-08js樹(shù)插件zTree獲取所有選中節(jié)點(diǎn)數(shù)據(jù)的方法
這篇文章主要介紹了js樹(shù)插件zTree獲取所有選中節(jié)點(diǎn)數(shù)據(jù)的方法,是對(duì)js樹(shù)插件zTree非常實(shí)用的操作,需要的朋友可以參考下2015-01-01