最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:26:34
文檔

JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果

JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果:大家或許做過(照片輪播)無限滾動(dòng)圖片的項(xiàng)目,但是,如果使用普通的滾動(dòng),當(dāng)?shù)竭_(dá)最后一張時(shí),便會(huì)滾動(dòng)回第一張,這是一個(gè)非常不好的用戶體驗(yàn)。下面通過本文給大家分享基于JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果,具體實(shí)現(xiàn)代碼如下所示: 實(shí)現(xiàn)效
推薦度:
導(dǎo)讀JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果:大家或許做過(照片輪播)無限滾動(dòng)圖片的項(xiàng)目,但是,如果使用普通的滾動(dòng),當(dāng)?shù)竭_(dá)最后一張時(shí),便會(huì)滾動(dòng)回第一張,這是一個(gè)非常不好的用戶體驗(yàn)。下面通過本文給大家分享基于JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果,具體實(shí)現(xiàn)代碼如下所示: 實(shí)現(xiàn)效

大家或許做過(照片輪播)無限滾動(dòng)圖片的項(xiàng)目,但是,如果使用普通的滾動(dòng),當(dāng)?shù)竭_(dá)最后一張時(shí),便會(huì)滾動(dòng)回第一張,這是一個(gè)非常不好的用戶體驗(yàn)。下面通過本文給大家分享基于JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果,具體實(shí)現(xiàn)代碼如下所示:

實(shí)現(xiàn)效果:

實(shí)現(xiàn)原理:

// 步驟
// 1. 獲取事件源以及相關(guān)元素
// 2. 復(fù)制第一張圖片所在的li,添加到ul的最后面
// 3. 給ol添加li,ul中的個(gè)數(shù)-1個(gè),并點(diǎn)亮第一個(gè)按鈕
// 4. 鼠標(biāo)放到ol的li上切換圖片
// 5. 添加定時(shí)器
// 6. 左右切換圖片(鼠標(biāo)放上去隱藏,移開顯示)

實(shí)現(xiàn)代碼:

<!DOCTYPE html>
<html>
<head>
 <title>輪播圖</title>
 <meta charset="utf-8">
 <style type="text/css">
 *{
 padding: 0;
 margin: 0;
 list-style: none;
 border: 0;
 }
 .all{
 width: 500px;
 height: 200px;
 padding: 7px;
 margin: 100px auto;
 position: relative;
 box-shadow: 1px 1px 5px #2d2d2d;
 }
 .screen{
 width: 500px;
 height: 200px;
 overflow: hidden;
 position: relative;
 }
 .screen li{
 width: 500px;
 height: 200px;
 overflow: hidden;
 float: left;
 }
 .screen ul{
 position: absolute;
 left: 0;
 top: 0;
 width: 3000px;
 }
 .all ol{
 position: absolute;
 right: 10px;
 bottom: 10px;
 line-height: 20px;
 text-align: center;
 }
 .all ol li{
 float: left;
 width: 20px;
 height: 20px;
 text-align: center;
 background-color: #fff;
 border: 1px solid #ccc;
 margin-left: 10px;
 cursor: pointer;
 }
 .all ol li.current{
 background-color: #03c03c;
 }
 #arr{
 display: none;
 }
 #arr span{
 width: 40px;
 height: 40px;
 left: 5px;
 top: 50%;
 position: absolute;
 margin-top: -20px;
 background-color: #000;
 cursor: pointer;
 line-height: 35px;
 text-align: center;
 font-weight: bold;
 font-family: "微軟雅黑";
 font-size: 30px;
 color: #fff;
 opacity: 0.3;
 border-radius: 50%;
 box-shadow: 1px 1px 3px #2d2d2d;
 }
 #arr #right{
 right: 5px;
 left: auto;
 }
 </style>
</head>
<body>
<div class="all" id="all">
 <div class="screen" id="screen">
 <ul id="ul">
 <li><img src="./images/01.jpg" width="500" height="200"></li>
 <li><img src="./images/02.jpg" width="500" height="200"></li>
 <li><img src="./images/03.jpg" width="500" height="200"></li>
 <li><img src="./images/04.jpg" width="500" height="200"></li>
 <li><img src="./images/05.jpg" width="500" height="200"></li>
 </ul>
 <!-- 圖片子菜單 -->
 <ol>
 </ol>
 <!-- 左右切換按鈕 -->
 <div id="arr">
 <span id="left"><</span>
 <span id="right">></span>
 </div>
 </div>
</div>
<!-- script -->
<script type="text/javascript">
 // 賦值第一張圖片放到ul的最后,當(dāng)圖片切換到第五張的時(shí)候,直接切換第六張,再?gòu)牡谝粡埱袚Q到第二張的時(shí)候先瞬間切換到第一張圖片,然后滑倒第二張
 // 步驟
 // 1. 獲取事件源以及相關(guān)元素
 // 2. 復(fù)制第一張圖片所在的li,添加到ul的最后面
 // 3. 給ol添加li,ul中的個(gè)數(shù)-1個(gè),并點(diǎn)亮第一個(gè)按鈕
 // 4. 鼠標(biāo)放到ol的li上切換圖片
 // 5. 添加定時(shí)器
 // 6. 左右切換圖片(鼠標(biāo)放上去隱藏,移開顯示)
 // 1. 獲取事件源以及相關(guān)元素
 var all = document.getElementById("all");
 var screen = all.firstElementChild || all.firstChild;
 var imgWidth = screen.offsetWidth;
 var ul = screen.firstElementChild || screen.firstChild;
 var ol = screen.children[1];
 var div = screen.lastElementChild || screen.lastChild;
 var spanArr = div.children;
 // 2. 復(fù)制第一張圖片所在的li,添加到ul的最后面
 var ulNewLi = ul.children[0].cloneNode(true);
 ul.appendChild(ulNewLi);
 // 3. 給ol添加li,ul中的個(gè)數(shù)-1個(gè),并點(diǎn)亮第一個(gè)按鈕
 for(var i=0; i<ul.children.length-1; i++){
 var olNewLi = document.createElement("li");
 olNewLi.innerHTML = i+1;
 ol.appendChild(olNewLi);
 } 
 var olLiArr = ol.children;
 olLiArr[0].className = "current";
 // 4. 鼠標(biāo)放到ol的li上切換圖片
 for(var i=0; i<olLiArr.length; i++){
 // 自定義屬性,把索引值綁定到元素的index屬性上
 olLiArr[i].index = i;
 olLiArr[i].onmouseover = function(){
 // 排他思想
 for(var j=0; j<olLiArr.length; j++){
 olLiArr[j].className = "";
 }
 this.className = "current"
 // 鼠標(biāo)放到小方塊上時(shí),索引值和key以及square同步
 // key = this.index;
 // square = this.index;
 key = square = this.index;
 // 移動(dòng)盒子
 animate(ul, -this.index*imgWidth);
 }
 }
 // 5. 添加定時(shí)器
 var timer = setInterval(autoPlay, 1000);
 // 固定向右切換圖片
 // 兩個(gè)定時(shí)器(一個(gè)記錄圖片,一個(gè)記錄子菜單欄)
 var key = 0;
 var square = 0;
 function autoPlay(){
 // 通過key的自增來模擬圖片的索引值,然后移動(dòng)ul
 key++;
 if(key > olLiArr.length){
 // 圖片已經(jīng)滑到最后一張,接下來應(yīng)該跳轉(zhuǎn)到第一張,然后滑動(dòng)到第二張
 ul.style.left = 0;
 key = 1;
 }
 animate(ul, -key*imgWidth);
 // 通過控制square的自增來模擬小方塊的索引值,然后點(diǎn)亮盒子
 // 排他思想做小方塊
 square++;
 if(square > olLiArr.length-1){
 // 索引值不能大于5,如果大于5則立即變?yōu)?;
 square = 0;
 }
 for(var i=0; i<olLiArr.length; i++){
 olLiArr[i].className = "";
 }
 olLiArr[square].className = "current";
 }
 // 鼠標(biāo)放上去清除定時(shí)器,移開啟動(dòng)定時(shí)器
 all.onmouseover = function(){
 div.style.display = "block";
 clearInterval(timer);
 }
 all.onmouseout = function(){
 div.style.display = "none";
 timer = setInterval(autoPlay,1000);
 }
 // 6. 左右切換圖片(鼠標(biāo)放上去顯示,移開隱藏)
 spanArr[0].onclick = function(){
 // 通過控制key的自增來模擬圖片的索引值,然后移動(dòng)ul
 key--;
 if(key<0){
 // 先移到最后一張,然后key的值取前一張的索引值,然后向前移動(dòng)
 ul.style.left = -imgWidth*(olLiArr.length) + "px";
 key = olLiArr.length-1;
 }
 animate(ul, -key*imgWidth);
 // 通過控制square的自增來模擬小方塊的索引值,然后點(diǎn)亮小方塊
 square--;
 if(square<0){
 // 索引值不能大于等于5,如果為5,立即變?yōu)?
 square = olLiArr.length-1;
 }
 for(var i=0; i<olLiArr.length; i++){
 olLiArr[i].className = "";
 }
 olLiArr[square].className = "current";
 }
 spanArr[1].onclick = function(){
 // 右側(cè)的和定時(shí)器一模一樣
 autoPlay();
 }
 // 動(dòng)畫封裝
 var absSpeed = 10; //設(shè)定步長(zhǎng)
 function animate(ele, target){
 clearInterval(ele.timer);
 var speed = target > ele.offsetLeft ? absSpeed : -absSpeed;
 ele.timer = setInterval(function(){
 var val = target - ele.offsetLeft;
 ele.style.left = ele.offsetLeft + speed + "px";
 if(Math.abs(val) < Math.abs(speed)){
 ele.style.left = target + "px";
 clearInterval(ele.timer);
 }
 }, 10)
 }
</script>
</body>
</html>

總結(jié)

以上所述是小編給大家介紹的JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果

JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果:大家或許做過(照片輪播)無限滾動(dòng)圖片的項(xiàng)目,但是,如果使用普通的滾動(dòng),當(dāng)?shù)竭_(dá)最后一張時(shí),便會(huì)滾動(dòng)回第一張,這是一個(gè)非常不好的用戶體驗(yàn)。下面通過本文給大家分享基于JavaScript實(shí)現(xiàn)帶有子菜單和控件的slider輪播圖效果,具體實(shí)現(xiàn)代碼如下所示: 實(shí)現(xiàn)效
推薦度:
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top