1. 程式人生 > 程式設計 >js輪播圖之旋轉木馬效果

js輪播圖之旋轉木馬效果

本文例項為大家分享了js輪播圖之旋轉木馬效果的具體程式碼,供大家參考,具體內容如下

思路:給定一個數組,儲存每張圖片的位置,旋轉將位置進行替換
左旋轉:將陣列第一個資料刪除,然後新增到陣列的最後
右旋轉:將陣列最後一個資料刪除,然後新增到陣列的開頭
先附上效果圖,再來實現

js輪播圖之旋轉木馬效果

接下來就是最主要的,封裝原生js動畫函式

//封裝函式獲取任意一個元素的任意屬性的值(相容ie8)
function getStyle(element,attr) {
 return window.getComputedStyle ? window.getComputedStyle(element,null)[attr] : element.currentStyle[attr];
}
//封裝js變速動畫
function animate(element,json,fn) {
 //每次啟動定時器之前先停止
 clearInterval(element.tmId);
 element.tmId = setInterval(function () {
  var flag = true;
  //遍歷物件中的每個屬性
  for (var attr in json) {
   //執行透明度動畫
   if (attr == "opacity") {
    //獲取當前元素的屬性值
    var current = parseInt(getStyle(element,attr)*100);
    //獲取目標值
    var target = json[attr]*100;
    //移動的步數
    var step = (target - current) / 10;
    step = step > 0 ? Math.ceil(step) : Math.floor(step);
    //移動後的值
    current += step;
    element.style[attr] = current / 100;
   } else if (attr == "zIndex") {
    //改變層級屬性
    element.style[attr] = json[attr];
   } else {
    //獲取當前元素的屬性值
    var current = parseInt(getStyle(element,attr));
    //獲取目標值
    var target = json[attr];
    //移動的步數
    var step = (target - current) / 10;
    step = step > 0 ? Math.ceil(step) : Math.floor(step);
    //移動後的值
    current += step;
    element.style[attr] = current + "px";
    if (current != target) {
     flag = false;
    }
   }
  }
  if (flag) {
   clearInterval(element.tmId);
   //如果有回撥函式就呼叫
   if (fn) fn();
  }
  // 測試
  // console.log("目標:" + target + "/當前:" + current + "/步數:" + step);
 },20);
}

封裝完函式,剩下的直接呼叫就可以了,最後附上旋轉木馬完整程式碼?

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <title>旋轉木馬輪播圖</title>
 <link rel="stylesheet" href="css/css(1).css" rel="external nofollow" />
 <script src="common.js"></script>
 <script>
  var config = [
   {
    width: 400,top: 20,left: 50,opacity: 0.2,zIndex: 2
   },//0
   {
    width: 600,top: 70,left: 0,opacity: 0.8,zIndex: 3
   },//1
   {
    width: 800,top: 100,left: 200,opacity: 1,zIndex: 4
   },//2
   {
    width: 600,left: 600,//3
   {
    width: 400,left: 750,zIndex: 2
   }//4

  ];

  window.onload = function () {
   var flag = true;
   var list = $query("#slide").getElementsByTagName("li");

   function flower() {
    //1、圖片散開
    for (var i = 0; i < list.length; i++) {
     //設定每個li的寬,透明度,left,top,zindex
     animate(list[i],config[i],function () {
      flag = true;
     });
    }
   }

   flower();//初始化呼叫函式
   //按鈕的顯示與隱藏
   $query("#slide").onmouseover = function () {
    $query("#arrow").style.opacity = "1";
   }
   $query("#slide").onmouseout = function () {
    $query("#arrow").style.opacity = "0";
   }
   //點選切換
   $query("#arrLeft").onclick = function () {
    if (flag) {
     config.unshift(config.pop());
     flower();
     flag = false;
    }
   }
   $query("#arrRight").onclick = function () {
    if (flag) {
     config.push(config.shift());
     flower();
     flag = false;
    }
   }
   //自動切換
   setInterval(function () {
    config.push(config.shift());
    flower();
   },2000);
  }
 </script>

</head>
<body>
<div class="wrap" id="wrap">
 <div class="slide" id="slide">
  <ul>
   <li><a href="#"><img src="images/slidepic1.jpg" alt="js輪播圖之旋轉木馬效果"/></a></li>
   <li><a href="#"><img src="images/slidepic2.jpg" alt="js輪播圖之旋轉木馬效果"/></a></li>
   <li><a href="#" ><img src="images/slidepic3.jpg" alt="js輪播圖之旋轉木馬效果"/></a></li>
   <li><a href="#"><img src="images/slidepic4.jpg" alt="js輪播圖之旋轉木馬效果"/></a></li>
   <li><a href="#"><img src="images/slidepic5.jpg" alt="js輪播圖之旋轉木馬效果"/></a></li>
  </ul>
  <div class="arrow" id="arrow">
   <a href="javascript:void(0);" class="prev" id="arrLeft"></a>
   <a href="javascript:void(0);" class="next" id="arrRight"></a>
  </div>
 </div>
</div>

</body>
</html>

精彩專題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。