中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

原生js如何實現輪播圖特效

發布時間:2020-07-29 09:28:43 來源:億速云 閱讀:199 作者:小豬 欄目:web開發

這篇文章主要講解了原生js如何實現輪播圖特效,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

輪播圖也稱為焦點圖,是網頁中比較常見的網頁特效。

功能需求:

1.鼠標經過輪播圖模塊,左右按鈕顯示,離開隱藏左右按鈕。

2.點擊右側按鈕一次,圖片往左播放一張,以此類推,左側按鈕同理。

3.圖片播放的同時,下面小圓圈模塊跟隨一起變化。

4.點擊小圓圈,可以播放相應圖片。

5.鼠標不經過輪播圖,輪播圖也會自動播放圖片。

6.鼠標經過,輪播圖模塊, 自動播放停止。

此文章的代碼為一個完整的輪播圖的實現代碼,復制即可運行

實現效果由于大小問題無法上傳,可自行觀看淘寶或京東首頁輪播圖效果

html文件:

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <link rel="stylesheet" href="css/index.css" rel="external nofollow" >
 <script src="js/animate.js"></script>
 <script src="js/index.js"></script>

</head>

<body>
 <div class="box">
 <ul>
  <li><img src="img/focus.jpg" alt=""></li>
  <li><img src="img/focus1.jpg" alt=""></li>
  <li><img src="img/focus2.jpg" alt=""></li>
  <li><img src="img/focus3.jpg" alt=""></li>
 </ul>
 <ol>
 </ol>
 <div class="arr-l"> < </div>
 <div class="arr-r"> > </div>
 </div>
</body>

</html>

css文件:

* {
 margin: 0;
 padding: 0;
 outline: none;
}
.box {
 overflow: hidden;
 position: relative;
 height: 455px;
 width: 721px;
 background-color: pink;
 margin: 50px auto;
}
.box ul {
 position: absolute;
 top: 0;
 left: 0;
 width: 600%;
}
.box ul li {
 list-style: none;
 float: left;
}
.box ol {
 position: absolute;
 bottom: 10px;
 left: 100px;
 background-color: rgba(255, 255, 255, .3);
 border-radius: 8px;
 list-style: none;
 height: 10px;
 padding: 2px 5px;
}
.box ol li {
 cursor: pointer;
 float: left;
 height: 8px;
 width: 8px;
 border: 1px solid #fff;
 border-radius: 50%;
 margin: 0 5px;
}
.arr-l,
.arr-r {
 display: none;
 color: #fff;
 cursor: pointer;
 position: absolute;
 height: 40px;
 width: 30px;
 background-color: rgba(0, 0, 0, .3);
 line-height: 40px;
 text-align: center;
}
.arr-l {
 top: 50%;
 left: 0;
 transform: translateY(-50%);
}
.arr-r {
 right: 0;
 top: 50%;
 transform: translateY(-50%);
}
.current {
 background-color: #fff;
}

動畫實現js文件animate.js:

function animate(obj, target, callback) {
 clearInterval(obj.timer);
 obj.timer = setInterval(function () {
 if (target - obj.offsetLeft > 0) {
  var step = Math.ceil((target - obj.offsetLeft) / 10);
 } else {
  var step = Math.floor((target - obj.offsetLeft) / 10);
 }

 if (obj.offsetLeft == target) {
  clearInterval(obj.timer);
  callback && callback();
 }
 obj.style.left = obj.offsetLeft + step + 'px';
 }, 15)
}

index.js:

window.addEventListener('load', function () {
 var arrl = this.document.querySelector('.arr-l');
 var arrr = this.document.querySelector('.arr-r');
 var box = this.document.querySelector('.box');
 var boxWidth = box.offsetWidth;
 box.addEventListener('mouseenter', function () {
 arrl.style.display = 'block';
 arrr.style.display = 'block';
 clearInterval(timer);
 timer = null;
 })
 box.addEventListener('mouseleave', function () {
 arrl.style.display = 'none';
 arrr.style.display = 'none';
 timer = setInterval(function () {
  arrr.click();
 }, 2000);
 });


 var ul = box.querySelector('ul');
 var ol = box.querySelector('ol');
 for (var i = 0; i < ul.children.length; i++) {
 var li = document.createElement('li');
 li.setAttribute('data-index', i);
 ol.appendChild(li);
 ol.children[0].className = 'current';
 li.addEventListener('click', function () {
  for (var i = 0; i < ol.children.length; i++) {
  ol.children[i].className = '';
  }

  this.className = 'current';
  var dateindex = this.getAttribute('data-index');
  num = dateindex;
  circle = dateindex;
  animate(ul, -dateindex * boxWidth);
 });
 }

 var first = ul.children[0].cloneNode(true);
 ul.appendChild(first);

 var num = 0;
 var circle = 0;
 var flag = true;
 arrr.addEventListener('click', function () {
 if (flag) {
  flag = false;
  if (num == ul.children.length - 1) {
  ul.style.left = 0;
  num = 0;
  }
  num++;
  animate(ul, -num * boxWidth, function () {
  flag = true;
  });
  circle++;
  if (circle == ol.children.length) {
  circle = 0;
  }
  circleChange();
 }

 });
 arrl.addEventListener('click', function () {
 if (flag) {
  flag = false;
  if (num == 0) {
  num = ul.children.length - 1;
  ul.style.left = -num * boxWidth + 'px';
  }
  num--;
  animate(ul, -num * boxWidth, function () {
  flag = true;
  });
  circle--;
  if (circle < 0) {
  circle = ol.children.length - 1;
  }
  circleChange();

 }
 });
 function circleChange() {
 for (var i = 0; i < ol.children.length; i++) {
  ol.children[i].className = '';
 }
 ol.children[circle].className = 'current';
 }

 var timer = setInterval(function () {
 arrr.click();
 }, 2000);
})

注意事項

引用兩個js文件時,animate.js要在index.js之前引用,因為index.js中要用到animate.js里的函數。

看完上述內容,是不是對原生js如何實現輪播圖特效有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

盘山县| 沙田区| 田东县| 喜德县| 濮阳市| 托克逊县| 儋州市| 大港区| 宜章县| 平凉市| 嘉祥县| 随州市| 大英县| 正蓝旗| 故城县| 黄山市| 蒙山县| 郁南县| 巫山县| 吉隆县| 西畴县| 呈贡县| 黄石市| 湖州市| 密云县| 察雅县| 焦作市| 固阳县| 武定县| 东山县| 宜川县| 萍乡市| 鄯善县| 肇州县| 峨眉山市| 洮南市| 泗水县| 邛崃市| 新源县| 日照市| 泌阳县|