今天分享一下自動播放輪播圖,自動播放輪播圖是在昨天分享的輪播圖的基礎上添加了定時器,用定時器控制圖片的自動切換,函數中首先封裝一個方向的自動播放工能的小函數,這個函數中添加定時器,定時器中可以放向右走的代碼,也可以放向左走的代碼,然后在js加載的時候先執行一次,保證頁面加載的時候輪播圖是自動播放的,當然在鼠標懸停在遮罩層的時候我們需要清除這個定時器,讓自動播放功能關閉,然后在鼠標再次移出遮罩層的時候再次開啟定時器,這樣就實現了自動播放的功能。
然后今天的輪播圖中我添加了開關的功能,這個開關是為了避免不停的快速點擊切換圖片時上一個move還沒執行完畢然后下一個move再次開啟的bug。開關的思路是在函數開始執行之前創造一個false,然后在函數剛開始的時候利用if判斷配合布爾值的false實現開的功能,當代買執行過這個關馬上讓布爾值變為true,從而繼續執行代碼,在函數全部執行完畢的時候再返回為false;
下面分享代碼
html代碼:
<div id="tab">
<ul>
<li><img src="img/4.jpg" alt=""></li>
<li><img src="img/0.jpg" alt=""></li>
<li><img src="img/1.jpg" alt=""></li>
<li><img src="img/2.jpg" alt=""></li>
<li><img src="img/3.jpg" alt=""></li>
<li><img src="img/4.jpg" alt=""></li>
<li><img src="img/0.jpg" alt=""></li>
</ul>
<div id="cont">
<div class="pre"><span>向左</span></div>
<div class="next"><span>向右</span></div>
<ol>
<li class="on"></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ol>
</div>
</div>
css代碼:
*{
padding: 0;
margin: 0;
list-style:none;
}
#tab{
width: 300px;
height: 172px;
position:relative;
margin:100px auto;
overflow:hidden;
}
#tab ul{
width:2100px;
overflow:hidden;
position:absolute;
top: 0;
left: 0px;
}
#tab ul li{
width: 300px;
float:left;
}
#tab ul li img{
width: 300px;
}
#cont{
width: 300px;
height: 172px;
position:absolute;
top:0;
left: 0;
}
#cont div{
width: 150px;
height: 100%;
float:left;
display:none;
}
#cont div span{
width: 40px;
height: 40px;
background:rgba(0,0,0,0.2);
text-align:center;
line-height: 40px;
font-size:20px;
color:#fff;
position:absolute;
top:50%;
margin-top:-20px;
}
#cont .pre span{
left:0;
}
#cont .next span{
right:0;
}
#cont ol{
width: 100px;
position:absolute;
left: 100px;
bottom:10px;
}
#cont ol li{
width: 10px;
height: 10px;
background:#ccc;
border-radius:50%;
margin:5px;
float:left;
}
#cont ol .on{
background:red;
}
js代碼:
window.onload=function(){
var oTab=document.getElementById('tab');
var oUl=oTab.getElementsByTagName('ul')[0];
var aLi=oUl.children;
var oCont=document.getElementById('cont');
var oBtn=oCont.getElementsByTagName('div');
var oBar=oCont.getElementsByTagName('ol')[0];
var aC=oBar.children;
var timer=null;
var bReady=false;
//定位ul的初始位置
var iNow=1;
oUl.style.left=-aLi[0].offsetWidth*iNow+'px';
//當鼠標移入遮罩層,按鈕顯示,移出遮罩層,按鈕消失
oCont.onmouseover=function(){
clearInterval(timer);
oBtn[0].style.display='block';
oBtn[1].style.display='block';
};
//當鼠標移出的時候開啟定時器讓ul自動向前運動
oCont.onmouseleave=function(){
setInterval(domove,2000);
oBtn[0].style.display='none';
oBtn[1].style.display='none';
};
//把運動封成一個函數,向前向后只是改變iNow的值和判斷終點位置
function domove(){
if(bReady){return}
bReady=true;
iNow--;
move(oUl,{left:-aLi[0].offsetWidth*iNow},{"complete":function(){
if(iNow==0){
iNow=aLi.length-2;
oUl.style.left=-aLi[0].offsetWidth*iNow+'px';
}
for(var i=0;i<aC.length;i++){
aC[i].className='';
}
aC[iNow-1].className='on';
bReady=false;
}});
}
同樣的,這個自動播放輪播圖應用了我自己封裝的move函數,這個move函數需要提前引入,move函數我已經分享到上一篇文章中;
明天會繼續分享手機端的拖拽選項卡;
Improve myself little by little every day!
