JS實現自動輪播圖效果(js案例)


現在很多網站都有輪播圖,這篇文章主要為大家詳細介紹了js實現輪播圖的完整代碼及原理,需要的小伙伴可以參考一下。

1、輪播圖主要功能:

1、  圖片自動輪播(主圖切換同時下面導航圖片也會跟着變化)

2、  鼠標懸停的時候,圖片輪播停止,鼠標離開后繼續

3、  單擊左右按鈕切換圖片

4、  鼠標移入后左右按鈕出現,移出消失

具體效果如下:

鼠標移入:

 

輪播圖片數量、css樣式等,小伙伴也可根據自己的需求做相應調整。

2、具體實現部分

特別重要的是,在我們寫任何動態效果之前,我們應該先把靜態頁面寫出來,在考慮動態效果的實現。

HTML代碼:

 

<div id="div1">
    <ul class="big_pic">
        <div class="prev">
            <a class="mark_left" href="#"></a>
        </div>
        <div class="next">
            <a class="mark_right" href="#"></a>
        </div>
        <div class="text">圖片1詳情</div>
        <div class="length">1/6</div>
        <li style="z-index: 1"><img src="images/flash_1.jpg" /></li>
        <li><img src="images/flash_2.jpg" /></li>
        <li><img src="images/flash_3.jpg" /></li>
        <li><img src="images/flash_4.jpg" /></li>
        <li><img src="images/flash_5.jpg" /></li>
        <li><img src="images/flash_6.jpg" /></li>
    </ul>
    <ul class="small_pic" >
        <li><img src="images/flash_1.jpg" /></li>
        <li><img src="images/flash_2.jpg" /></li>
        <li><img src="images/flash_3.jpg" /></li>
        <li><img src="images/flash_4.jpg" /></li>
        <li><img src="images/flash_5.jpg" /></li>
        <li><img src="images/flash_6.jpg" /></li>
    </ul>
</div>

  

Css樣式:

 

@charset "utf-8";
* {
  margin: 0;
  padding: 0;
  list-style: none;
}
#div1 {
  width: 500px;
  height: 420px;
  margin: 100px auto;
  position: relative;
  cursor: pointer;
  overflow: hidden;
}
#div1 ul.big_pic {
  position: relative;
  height: 320px;
}
#div1 ul.big_pic div.prev {
  opacity: 0;
  -webkit-transition: all .3s linear;
  transition: all .3s linear;
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  right: 50%;
  z-index: 100;
}
#div1 ul.big_pic div.prev a.mark_left {
  position: absolute;
  width: 60px;
  height: 60px;
  top: 50%;
  left: 10px;
  background: url("../images/btn.gif");
}
#div1 ul.big_pic div.next {
  opacity: 0;
  -webkit-transition: all .5s linear;
  transition: all .5s linear;
  position: absolute;
  left: 50%;
  top: 0;
  bottom: 0;
  right: 0;
  z-index: 100;
}
#div1 ul.big_pic div.next a.mark_right {
  position: absolute;
  width: 60px;
  height: 60px;
  top: 50%;
  right: 10px;
  background: url("../images/btn.gif") left -60px;
}
#div1 ul.big_pic div.text {
  position: absolute;
  bottom: 0;
  left: 0;
  line-height: 26px;
  color: white;
  background-color: rgba(0, 0, 0, 0.51);
  width: 70%;
  height: 26px;
  z-index: 200;
  font-size: 14px;
  padding-left: 20px;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
}
#div1 ul.big_pic div.length {
  position: absolute;
  bottom: 0;
  right: 0;
  line-height: 26px;
  color: white;
  background-color: rgba(0, 0, 0, 0.51);
  width: 30%;
  height: 26px;
  z-index: 200;
  font-size: 14px;
  text-align: center;
}
#div1 ul.big_pic li {
  position: absolute;
  top: 0;
  left: 0;
  width: 500px;
  height: 320px;
  overflow: hidden;
}
#div1 ul.big_pic li img {
  width: 100%;
  height: 320px;
}
#div1 ul.small_pic {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  background-color: #b0b0b0;
  height: 100px;
  padding: 6px 5px 6px 8px;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  position: absolute;
}
#div1 ul.small_pic li {
  width: calc(500px / 3);
}
#div1 ul.small_pic li img {
  width: calc(488px / 3);
  height: 100%;
}
#div1 ul.small_pic li:not(:last-child) img {
  padding-right: 4px;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
}

  

接下來是最重要的js代碼:

  var oDiv=document.getElementById('div1');
    var oPrv=oDiv.querySelector('div.prev');
    var oNext=oDiv.querySelector('div.next');
    var oBtnPrev=oPrv.querySelector('a.mark_left');
    var oBtnNext=oNext.querySelector('a.mark_right');
    var oText=oDiv.querySelector('div.text');
    var oLength=oDiv.querySelector('div.length');
    var aUl=oDiv.querySelectorAll('ul');
    var aBigLi=aUl[0].querySelectorAll('li');
    var aSmallLi=aUl[1].querySelectorAll('li');  //獲取標簽

    var zIndex=1,now=0;//zIndex:主圖Z軸層級,now:下面導航圖片的下標(從0開始)
    oBtnNext.onclick=function () {
        now++;
        if(now===aSmallLi.length) now=0;//當now等於小導航圖片的長度時,把主圖片換成第一張
        opublic();
    };
    oBtnPrev.onclick=function () {
        now--;
        if(now===-1) now=aSmallLi.length-1;//當now等於-1,把主圖片換成最后
        opublic();
    };
    for (var i=0;i<aSmallLi.length;i++){
        aSmallLi[i].style.opacity=.6;//統一設置下面導航圖片透明度為0.6
        aSmallLi[0].style.opacity=1;//初始化第一個導航圖片透明度為1
        aSmallLi[i].index=i;//為每一個導航圖加一個index的自定義屬性
        aSmallLi[i].onclick=function () {//添加單擊事件
            now=this.index;//當單擊圖片后,主圖切換為對應圖片
            opublic();
        };
    }
    function opublic(){//公共部分
        aBigLi[now].style.zIndex=zIndex++;//圖片切換改變Z軸層級
        aBigLi[now].style.height=0;
        startMove(aBigLi[now],'height',320);//圖片高度從0->360,實現圖片動態疊加效果

        oText.innerHTML='圖片'+(now+1)+'詳情';
        oLength.innerHTML=(now+1)+'/'+aBigLi.length;

        for(var i=0;i<aSmallLi.length;i++)
        {
            startMove(aSmallLi[i], 'opacity', 60);
        }
        startMove(aSmallLi[now], 'opacity', 100);

        if(now===0){
            startMove(aUl[1], 'left', 0);
        }
        else if(now===aSmallLi.length-1){//當當前導航圖片為最后一張時,固定最后一張圖片位置
            startMove(aUl[1], 'left', -(now-2)*aSmallLi[0].offsetWidth);
        }
        else{//下面導航圖片的輪播效果
            startMove(aUl[1], 'left', -(now-1)*aSmallLi[0].offsetWidth);
        }
    }
    oPrv.onmouseover=oNext.onmouseover=function () {//鼠標移入左右按鈕出現
        this.style.opacity=1;
    };
    oPrv.onmouseout=oNext.onmouseout=function () {//鼠標移出左右按鈕消失
        this.style.opacity=0;
    };

    var timer=setInterval(oBtnNext.onclick, 3000);//設置一個定時器,每3秒鍾模擬一次右邊按鈕的單擊事件
    oDiv.onmouseenter=function () {//鼠標移入后,定時器取消
        clearInterval(timer);
    };
    oDiv.onmouseleave=function () {//鼠標離開后開啟定時器
        timer=setInterval(oBtnNext.onclick, 3000);
    }
function startMove(obj, attr, iTarget)//運動框架,
// obj:運動的對象,attr:運動的屬性,iTarget:目標值
{
	clearInterval(obj.timer);
	obj.timer=setInterval(function (){
		var cur=0;
		if(attr==='opacity')
		{
			cur=Math.round(parseFloat(getStyle(obj, attr))*100);
		}
		else
		{
			cur=parseInt(getStyle(obj, attr));
		}
		var speed=(iTarget-cur)/10;
		speed=speed>0?Math.ceil(speed):Math.floor(speed);

		if(cur==iTarget)
		{
			clearInterval(obj.timer);
		}
		else
		{
			if(attr=='opacity')
			{
				obj.style.filter='alpha(opacity:'+(cur+speed)+')';
				obj.style.opacity=(cur+speed)/100;
			}
			else
			{
				obj.style[attr]=cur+speed+'px';
			}
		}
	}, 30);
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM