這篇文章簡而言之就是說用javascript實現(xiàn)圖片輪播簡單效果的具體代碼,直接放代碼:
這里是css樣式
* { margin: 0; padding: 0; } ul, li { list-style: none; } img { display: block; /*vertical-align: middle;*/ } a { text-decoration: none; } input { outline: none; } .clearFix:after { content: ""; display: table; clear: both; } #box { position: relative; width: 500px; height: 300px; margin: 50px auto; overflow: hidden; } #box .imglist { position: absolute; left: -500px; top: 0; width: 3500px; height: 300px; } #box .imglist li { float: left; width: 500px; height: 300px; } #box .imglist li img { width: 500px; height: 300px; } #box span { position: absolute; top: 50%; transform: translateY(-50%); width: 25px; height: 50px; background-color: rgba(200, 200, 200, 0.7); font-size: 20px; text-align: center; line-height: 50px; color: white; opacity: 0; transition: opacity 1s; } #box .left { left: 0; } #box .right { right: 0; } #box .btnlist { position: absolute; left: 50%; transform: translateX(-50%); bottom: 10px; overflow: hidden; } #box .btnlist li { float: left; width: 10px; height: 10px; margin-right: 10px; border-radius: 50%; background-color: gray; } #box .btnlist li.current { background-color: red; }
這里是body里的div,圖片都是寬500px的,這個是我設(shè)計的,你也可以按照自己的尺寸來
<div id="box"> <ul class="imglist"> <li><img src="images/yaya5.jpg" /></li> <li><img src="images/yaya1.jpg" /></li> <li><img src="images/yaya2.jpg" /></li> <li><img src="images/yaya3.jpg" /></li> <li><img src="images/yaya4.jpg" /></li> <li><img src="images/yaya5.jpg" /></li> <li><img src="images/yaya1.jpg" /></li> </ul> <span class="left"> < </span> <span class="right"> > </span> <ul class="btnlist"> <li class="current"></li> <li></li> <li></li> <li></li> <li></li> </ul> </div>
這里是js代碼,代碼大部分地方都做了注釋
// 元素對象 var left = document.querySelector(".left"); var right = document.querySelector(".right"); var imglist = document.querySelector(".imglist"); var box = document.querySelector("#box"); var dots = document.querySelectorAll(".btnlist li"); // 變量區(qū) var imgWidth = 500; //圖片的寬度 var time = 500; //切換一張圖片耗費的時間 var steps = 50; //步數(shù) var interval = 10; //定時任務(wù)的時間間隔 var current_red = 0; // isMoving變量用于判斷當(dāng)前是否正在切圖中 var isMoving = false; // 自動輪播定時任務(wù)的id值 var autoId; // 鼠標(biāo)移入時顯示左右箭頭,移出時隱藏左右箭頭 box.addEventListener("mouseenter", function (e) { left.style.opacity = 1; right.style.opacity = 1; // 鼠標(biāo)移入到box時停止輪播 clearInterval(autoId); }); box.addEventListener("mouseleave", function (e) { left.style.opacity = 0; right.style.opacity = 0; // 鼠標(biāo)移出box時開啟自動輪播 autoMove(); }); // 對左右箭頭設(shè)置點擊事件 function move(e, direction) { // isMoving為true時表示正在切換圖片,不能再執(zhí)行move函數(shù)的代碼 if (isMoving) { return; } isMoving = true; // 獲取當(dāng)前imglist的位置 var start_x = imglist.offsetLeft; var end_x; // 判斷direction的數(shù)據(jù)類型 if (typeof direction === "number") { end_x = direction; var delta_x = end_x - start_x; } else { // 通過點擊的箭頭確定圖片移動的距離 var delta_x = direction === "left" ? imgWidth : -imgWidth; // 計算要移動到的位置 end_x = start_x + delta_x; } // 計算每一步移動的距離 var step_dis = delta_x / steps; var next_inter_id = setInterval(function () { var current_x = imglist.offsetLeft; current_x += step_dis; imglist.style.left = current_x + "px"; // 條件成立表示完成了此次圖片的切換,清除定時器 if (current_x === end_x) { // current_x等于0表示此時顯示的是位置上的第一張圖片(第一個li),我們要切換到倒數(shù)第二張去。 if (current_x === 0) { imglist.style.left = -2500 + "px"; // current_x等于-3000表示此時顯示的是位置上的最后一張(第七個li),我們要切換到第二張圖片去。 } else if (current_x === -3000) { imglist.style.left = -500 + "px"; } clearInterval(next_inter_id); // 圖片切換完成時切換小圓點,傳入的參數(shù)是此時imglist的left屬性的值 changeDots(current_x); // 圖片切換完成,可以繼續(xù)點擊箭頭或小圓點切圖了 isMoving = false; } }, interval); } right.addEventListener("click", function (e) { move(e, "right"); }); left.addEventListener("click", function (e) { move(e, "left"); }); /* 無限循環(huán)的實現(xiàn)思路:在首尾各添加一張圖片,首部添加第五張圖片,尾部添加第一張圖片 1、改變imglist的寬度 2、改變imglist元素中l(wèi)eft的值 3、在添加兩張圖片后,輪播到第一張和最后一張時實現(xiàn)切換。 */ // 小圓點的切換 function changeDots(current_x) { /* current_x可能的取值:0 -500 -1000 -1500 -2000 -2500 -3000 除以-500: 0 1 2 3 4 5 6 整體減去1: -1 0 1 2 3 4 5 */ var index = current_x / -500 - 1; index = index === -1 ? 4 : index === 5 ? 0 : index; // console.log(index); // 把上一個小圓點紅色背景清除 dots[current_red].className = ""; // 把當(dāng)前切換到的圖片對應(yīng)的小圓點添加紅色背景 dots[index].className = "current"; // 將當(dāng)前紅色背景的小圓點的索引賦值給current_red變量 current_red = index; } // 小圓點的點擊事件 for (var i = 0; i < dots.length; i++) { dots[i].setAttribute("data-index", i); dots[i].onclick = function (e) { var index = this.dataset.index; // 計算圖片要切換到的目標(biāo)位置 var target_pos = -imgWidth * (Number(index) + 1); // 利用現(xiàn)有的move函數(shù)完成點擊小圓點圖片的切換 move(e, target_pos); }; } // 實現(xiàn)自動輪播 function autoMove() { autoId = setInterval(function () { move("right"); }, 3000); } autoMove();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/128203.html
摘要:綁定輪播事件然后是鼠標(biāo)移入移出事件的綁定鼠標(biāo)移入移出事件移入時停止輪播播放的定時器,移出后自動開始下一張的播放。 通過上一篇文章的學(xué)習(xí),我們基本掌握了一個輪子的封裝和開發(fā)流程。那么這次將帶大家開發(fā)一個更有難度的項目——輪播圖,希望能進一步加深大家對于面向?qū)ο蟛寮_發(fā)的理解和認(rèn)識。 So, Lets begin! 目前項目使用 ES5及UMD 規(guī)范封裝,所以在前端暫時只支持標(biāo)簽的引入方式...
摘要:之前是一個全局變量,如果不獨立,頁面只有一個定時器在運作。這時的判斷條件應(yīng)該是目標(biāo)距離與盒子目前距離之間差的絕對值大于等于一步距離絕對值的時候,讓他們執(zhí)行否則的話清除清除定時器,并將最后的距離直接設(shè)置為的距離。 showImg(https://segmentfault.com/img/remote/1460000012623412?w=1920&h=1080); JS特效 前言 經(jīng)過前...
摘要:頁面調(diào)試騰訊開發(fā)維護的代碼調(diào)試發(fā)布,錯誤監(jiān)控上報,用戶問題定位。同樣是由騰訊開發(fā)維護的代碼調(diào)試工具,是針對移動端的調(diào)試工具。前端業(yè)務(wù)代碼工具庫。動畫庫動畫庫,也是目前通用的動畫庫。 本人微信公眾號:前端修煉之路,歡迎關(guān)注 本篇文章整理自己使用過的和看到過的一些插件和工具,方便日后自己查找和使用。 另外,感謝白小明,文中很多的工具來源于此。 彈出框 layer:http://layer....
摘要:惰性載入表示函數(shù)執(zhí)行的分支只會發(fā)生一次,這里有兩種解決方式。插件,可以讓回調(diào)函數(shù)在頁面結(jié)構(gòu)加載完成后再運行。 前端基本功-示例代碼 (一) 點這里前端基本功-示例代碼 (二) 點這里 1.ajax var xhr = new XMLHttpRequest(); // 聲明一個請求對象 // 前端設(shè)置是否帶cookie xhr.withCredentials = true; xhr....
閱讀 561·2023-03-27 18:33
閱讀 750·2023-03-26 17:27
閱讀 647·2023-03-26 17:14
閱讀 603·2023-03-17 21:13
閱讀 537·2023-03-17 08:28
閱讀 1823·2023-02-27 22:32
閱讀 1315·2023-02-27 22:27
閱讀 2199·2023-01-20 08:28