欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

原生js实现轮播图特效

程序员文章站 2022-06-07 23:04:50
轮播图也称为焦点图,是网页中比较常见的网页特效。功能需求:​1.鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮。​2.点击右侧按钮一次,图片往左播放一张,以此类推,左侧按钮...

轮播图也称为焦点图,是网页中比较常见的网页特效。

功能需求:

​ 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里的函数。

精彩专题分享:jquery图片轮播 javascript图片轮播 bootstrap图片轮播

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。