溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript實現PC端橫向輪播圖

發(fā)布時間:2020-09-09 02:10:03 來源:腳本之家 閱讀:242 作者:菜鳥向往藍天 欄目:web開發(fā)

本文實例為大家分享了JavaScript實現PC端橫向輪播圖的具體代碼,供大家參考,具體內容如下

步驟:

第一步:先實現右側按鈕點擊圖片動起來;
1.每次點擊圖片走的距離;
2.起始位置已知,計算定時器每走一小步的距離;

第二步:判斷點擊按鈕一次圖片移動的距離,停止定時器;

第三步:左邊按鈕邏輯和右側按鈕幾乎一致;
1.因此封裝函數move(flag),函數傳參是Boolean則是左右按鈕方向

第四步:無縫輪播:html結構修改,在當前結構分別加第一張圖和最后一張圖;
1.判斷圖片位置,設置相應位置;

第五步:小圓點邏輯:排他思想;
1.關鍵在于小圓點變色,用最終位置計算小圓點下標,設置樣式;

第六步:點擊小圓點,圖片切換和小圓點位置對應,move函數中傳參數根據類型判斷,boolean 是左右按鈕,數值室小圓點下標相關;flag參數代表左右按鈕和小圓點;

第七步:自動輪播:根據圖片下標進行;

第八步:自動輪播和鼠標行為同步時:鼠標移入清楚自動輪播;鼠標移出自動輪播

第九步:鼠標移入后,點擊按鈕和小圓點有需要把自動輪播的小標值更新,否則沒法同步;

html代碼:

<div id="swiper">
 <ul class="list">
  <li><img src="img/9.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/6.jpg" alt=""></li>
  <li><img src="img/9.jpg" alt=""></li>
  <!-- 第一張 -->
  <li><img src="img/2.jpg" alt=""></li>
 </ul>
 <span class="btn-left">&lt;</span>
 <span class="btn-right">&gt;</span>
 <ul class="points">
  <li class="current"></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

css代碼:

<style type="text/css">
 * {
  margin: 0;
  padding: 0;
 }
 
 ul,
 li {
  list-style: none;
 }
 
 a {
  text-decoration: none;
 }
 
 img {
  display: block;
 }
 
 input {
  outline: none;
 }
 
 .clearFix:after {
  content: '';
  display: block;
  clear: both;
 }
 /*禁止系統(tǒng)滾動條*/
 
 html,
 body {
  height: 100%;
  overflow: hidden;
 }
 
 #swiper {
  position: relative;
  width: 1000px;
  height: 500px;
  background: green;
  margin: 50px auto 0;
  overflow: hidden;
 }
 
 #swiper .list {
  position: absolute;
  left: -1000px;
  top: 0;
  width: 7000px;
  overflow: hidden;
 }
 
 #swiper .list>li {
  float: left;
  width: 1000px;
  height: 500px;
 }
 
 #swiper .list>li img {
  width: 100%;
  height: 100%;
 }
 
 #swiper span {
  position: absolute;
  /* left: 0; */
  top: 40%;
  transform: translateY(-50%);
  width: 80px;
  height: 100px;
  background: rgba(0, 0, 0, 0.5);
  font-size: 50px;
  color: white;
  font-weight: bold;
  padding-top: 30px;
  text-align: center;
  opacity: 0;
  transition: opacity 1s;
  cursor: pointer;
 }
 
 #swiper:hover span {
  opacity: 1;
 }
 
 #swiper .btn-left {
  left: 0;
 }
 
 #swiper .btn-right {
  right: 0;
 }
 
 #swiper .points {
  position: absolute;
  left: 40%;
  transform: translateX(-50%);
  bottom: 20px;
  /* width: 300px; */
 }
 
 #swiper .points>li {
  width: 30px;
  height: 30px;
  background: rgba(0, 0, 0, 0.5);
  border-radius: 50%;
  float: left;
  margin: 0 5px;
 }
 
 #swiper .points .current {
  background: red;
 }
</style>

javascript代碼:

<script>
 window.onload = function() {
  // 獲取變量
  var swiper = document.querySelector('#swiper');
  var list = document.querySelector('#swiper .list');
  var liNodes = document.querySelectorAll('#swiper .list>li');
  var btnNodes = document.querySelectorAll('#swiper span');
  // 切換一張需要的總時長
  var timeAll = 1000;
  // 每走一步需要的時長
  var timeStep = 20;
  var timer = null;
  // 小圓點
  var icons = document.querySelectorAll('#swiper>.points li');
  var isMove = false;
  var autoTimer = null;

  // 鼠標進入banner
  swiper.onmouseenter = function() {
  // 清除定時器
  clearInterval(autoTimer);
  }

  // 鼠標離開banner
  swiper.onmouseleave = function() {
  // 打開自動輪播定時器
  autoRun();
  }

  // 點擊按鈕切換圖片
  // 右按鈕
  btnNodes[1].onclick = function() {
  // 圖片且切換函數
  move(true);
  }

  // 左按鈕
  btnNodes[0].onclick = function() {
  // 圖片切換函數
  move(false);
  }

  // 圖片切換函數
  function move(flag) {
  // 保證定時器只開一個,不會堆砌
  if (isMove) {
   return;
  }
  isMove = true;


  // 區(qū)分flag參數,boolean是左右圖片切換
  if (typeof flag == 'boolean') {
   if (flag) {
   var elementDistance = -1000;
   } else {
   var elementDistance = 1000;
   }
  } else {
   var elementDistance = flag - list.offsetLeft;
  }

  // 每次點擊后,ul所走的距離
  var elementLast = list.offsetLeft + elementDistance;
  // 每走一小步的距離
  var step = elementDistance / (timeAll / timeStep);

  timer = setInterval(function() {
   var left = list.offsetLeft + step;
   if (left == elementLast) {
   // 走的的距離等于最終的位置
   clearInterval(timer);
   if (left == -6000) {
    left = -1000;
   } else if (left == 0) {
    left = -5000;
   }
   isMove = false;
   }
   // 設置樣式
   list.style.left = left + 'px';
  }, timeStep);

  // 小圓點切換邏輯
  for (var i = 0; i < icons.length; i++) {
   icons[i].className = '';
  }

  // 小圓點切換
  var index = elementLast / -1000 - 1;
  if (index > 4) {
   index = 0;
  } else if (index < 0) {
   index = 4;
  }
  icons[index].className = 'current';
  console.log(icons);
  //讓自動輪播和點擊后下標保持統(tǒng)一
  autoIndex = index + 1;
  }

  // 點擊小圓點邏輯
  for (var i = 0; i < icons.length; i++) {
  icons[i].index = i;
  icons[i].onclick = function() {
   // 拿小圓點下標,求顯示圖片的下標,再求顯示圖片位置
   move((this.index + 1) * -1000);
  }
  }

  // 自動輪播邏輯
  var autoIndex = 1;
  autoRun();

  function autoRun() {
  autoTimer = setInterval(function() {
   autoIndex++;
   move(autoIndex * -1000);
   if (autoIndex == 6) {
   autoIndex = 1;
   }
  }, 2000);
  }
 }
</script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI