CSS transition屬性實現滑動式輪播圖

是的,趁着在玩輪播我用transition又寫了個滑動式的輪播圖,是仿的嗶哩嗶哩嗶哩嗶哩。效果看下面咯。ide

點我轉到CodePen函數

思路

這回我是用JS修改圖片的left屬性,用CSS的transition來實現動畫過程。好比說一個圖left: 200px; transition: left 0.3s linear;,而後我用JS把這個圖的left改成0,這樣圖片就有個0.3s的左移動畫啦。動畫

滑動式的輪播圖圖片是怎麼動的呢?this

clipboard.png

「中間」爲輪播圖展現區。假設有3張圖,咱們理下邏輯。spa

初始的時候,全部圖片都位於「右邊」。而後圖1到「中間」 → 圖1到「左邊」 & 圖2到「中間」 → 圖2到「左邊」 & 圖3到「中間」 → 圖2圖3到「右邊」 & 圖1到「中間」。這樣一個循環的過程。code

我用修改類名的方式來修改圖片的left值。沒有類名的時候圖片位於右側,有active類時圖片位於中間,有left類時位於左側。blog

img{
  left: 260px;  /*圖片均位於右側*/
  transition: left 0.3s linear;  /*改變left值實現動畫*/
}
img.active{
  left: 0;
}
img.left{
  left: -260px;
}

而後在JS裏經過setInterval(code,millisec)來定時執行切換圖片的函數。seo

代碼

HTML事件

<div id="slideshow">
  <!-- 插入輪播的圖片們 -->
  <img class="active" src="http://i0.hdslb.com/bfs/archive/1058ca7f23a79f4f0ae0760ad4c08ac9c596f70e.jpg" />
  <img src="http://i0.hdslb.com/bfs/archive/e10fa2ca13cb59b264fce0f9085e1a050cc2dab5.jpg" />
  <img src="http://i0.hdslb.com/bfs/archive/86783a2c790312bb9f5f473896f9d36ec4c1da34.jpg" />
  <!-- 插入輪播的頁碼們 -->
  <div>
    <span class="active" name="0"></span><span name="1"></span><span name="2"></span>
  </div>
  <!-- 插入圖片的描述們 -->
  <p class="active">刀劍亂舞-花丸-</p>
  <p>我太受歡迎了該怎麼辦</p>
  <p>少女編號</p>
</div>

CSS圖片

*{
  padding: 0; 
  margin: 0;
}
/*-- 輪播圖總體樣式-- */
#slideshow{
  width: 260px;
  height: 248px;
  margin: 20px auto;
  border-radius: 5px; 
  overflow: hidden;
  position: relative;
}
/*-- 圖片樣式 --*/
#slideshow img{
  position: absolute;
  top: 0;
  left: 260px;  /*圖片均位於右側*/
  transition: left 0.3s linear;  /*改變left值實現動畫*/
}
#slideshow img.active{
  left: 0;
}
#slideshow img.left{
  left: -260px;
}
/*-- 頁碼樣式 --*/
#slideshow div{
  position: absolute;
  bottom: 0;
  width: 100%;
  line-height: 0;
  text-align: center;
  padding: 5px 0;
  background: rgba(0,0,0,0.7);
}
#slideshow span{
  display: inline-block;
  width: 15px;
  height: 10px;
  margin: 0 3px;
  border-radius: 5px;
  background: white;
  transition: width 0.3s;
}
#slideshow span.active{
  width: 25px;
  background: rgb(216,83,127);
}
/*-- 圖片描述的樣式 --*/
#slideshow p{
  position: absolute;
  bottom: 20px;
  width: 100%;
  line-height: 20px;
  font-size: 14px;
  text-indent: 5px;
  color: white;
  background: rgba(0,0,0,0.4);
  cursor: default;
  opacity: 0;
  transition: opacity 0.3s linear;
}
#slideshow p.active{
  opacity: 1;
}

JS

//---------主角:輪播圖函數-------------
function slideshow() {
  var slideshow=document.getElementById("slideshow"),
  imgs=slideshow.getElementsByTagName("img"), //圖片們
  pages=slideshow.getElementsByTagName("span"), //頁碼們
  descrips=slideshow.getElementsByTagName("p"), //描述們
  length=imgs.length, //圖片數目
  current=1; //current爲當前活躍的圖片、頁碼、描述的編號

  function changeSlide() { //切換圖片的函數
    for (var i=0; i<length; i++) {
      if(i==current) {
        imgs[i].className="active";
        pages[i].className="active";
        descrips[i].className="active";
      } else {
        pages[i].className="";
        descrips[i].className="";
        if(i<current) {
          imgs[i].className="left";
        } else {
          imgs[i].className="";
        }
      }
    }
    current++; //自增1
    if(current>=length) {
      current=0;
    }
  }

  //每2s調用changeSlide函數進行圖片輪播
  var slideon=setInterval(changeSlide,2000);  

  slideshow.onmouseover=function(){
    clearInterval(slideon); //當鼠標移入時清除輪播事件
  }
  slideshow.onmouseout=function(){
    slideon=setInterval(changeSlide,2000); //當鼠標移出時從新開始輪播事件
  }

  for(var i=0; i<length; i++) {  //定義鼠標移入頁碼事件
    pages[i].onmouseover=function(){
      current=this.getAttribute("name");  //獲得當前鼠標指的頁碼
      changeSlide();
    }
  }

}

slideshow();

完。

相關文章
相關標籤/搜索