基于JavaScript实现简单的轮播图


Posted in Javascript onMarch 03, 2021

本文实例为大家分享了JavaScript实现简单的轮播图的具体代码,供大家参考,具体内容如下

js轮播图实现思路

1、先获取元素 盒子 左右按钮
2、鼠标经过 显示/隐藏 左右侧按钮
3、动态生成小圆圈、 添加自定义属性
4、小圆圈点击事件 添加current类名
5、添加动画事件 animate 等于 -索引号*focusWidth
6、克隆第一张图片到最后面
7、添加右侧/左侧按钮点击事件
8、设置定时器 手动调用右侧按钮点击事件

html代码部分

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

<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <link rel="stylesheet" href="css/index.css" >
 <script src="js/index.js"></script>
</head>

<body>
 <div class="focus">
 <a href="javascript:;" class="arrow_r">></a>
 <a href="javascript:;" class="arrow_l">
  <</a>
  <ul>
   <li>
   <a href=""><img src="images/focus.jpg" alt=""></a>
   </li>
   <li>
   <a href=""><img src="images/focus1.jpg" alt=""></a>
   </li>
   <li>
   <a href=""><img src="images/focus2.jpg" alt=""></a>
   </li>
   <li>
   <a href=""><img src="images/focus3.jpg" alt=""></a>
   </li>
  </ul>
  <ol class="circle">
  </ol>
 </div>
</body>

</html>

css样式部分

* {
 padding: 0;
 margin: 0;
 }
 
 li {
 list-style: none;
 }
 
 img {
 border: 0;
 vertical-align: top;
 }
 
 a {
 text-decoration: none;
 }
 
 .focus {
 position: relative;
 width: 721px;
 height: 455px;
 margin: 100px auto;
 overflow: hidden;
 }
 
 .focus ul {
 position: absolute;
 top: 0;
 left: 0;
 width: 600%;
 }
 
 .focus ul li {
 float: left;
 }
 
 .arrow_r,
 .arrow_l {
 display: none;
 position: absolute;
 top: 50%;
 transform: translateY(-50%);
 width: 40px;
 height: 40px;
 line-height: 40px;
 text-align: center;
 font-size: 24px;
 background: rgba(0, 0, 0, .2);
 color: #fff;
 z-index: 1;
 }
 
 .arrow_r {
 right: 0;
 }
 
 .circle {
 position: absolute;
 bottom: 10px;
 left: 50px;
 }
 
 .circle li {
 float: left;
 width: 8px;
 height: 8px;
 border: 2px solid rgba(255, 255, 255, .5);
 border-radius: 50%;
 margin: 0 3px;
 cursor: pointer;
 }
 
 .current {
 background-color: #fff;
 }

javascript部分

window.addEventListener('load', function() {
 //获取元素
 var focus = document.querySelector('.focus');
 var arrow_r = document.querySelector('.arrow_r');
 var arrow_l = document.querySelector('.arrow_l');
 var focusWidth = focus.offsetWidth;
 // 鼠标经过focus盒子 显示/隐藏 左右侧按钮 暂停轮播
 focus.addEventListener('mouseenter', function() {
 arrow_r.style.display = 'block';
 arrow_l.style.display = 'block';
 clearInterval(timer);
 timer = null;
 });
 focus.addEventListener('mouseleave', function() {
 arrow_r.style.display = 'none';
 arrow_l.style.display = 'none';
 timer = setInterval(function() {
  //调用点击事件
  arrow_r.click();
 }, 2000);
 });
 //动态生成小圆圈
 var ul = focus.querySelector('ul');
 var ol = focus.querySelector('.circle');
 for (var i = 0; i < ul.children.length; i++) {
 var li = document.createElement('li');
 li.setAttribute('index', i);
 ol.appendChild(li);
 //小圆圈点击事件
 li.addEventListener('click', function() {
  for (var i = 0; i < ol.children.length; i++) {
  ol.children[i].className = '';
  }
  var index = this.getAttribute('index');
  num = index;
  circle = index;
  this.className = 'current';
  animate(ul, -index * focusWidth);
 })
 }
 ol.children[0].className = 'current';
 //克隆第一张图片放到最后一张
 var fis = ul.children[0].cloneNode(true);
 ul.appendChild(fis);
 //右侧按钮点击事件
 var num = 0;
 var circle = 0;
 arrow_r.addEventListener('click', function() {
 if (num === ul.children.length - 1) {
  ul.style.left = 0;
  num = 0;
 }
 num++;
 animate(ul, -num * focusWidth);
 circle++;
 if (circle === ul.children.length - 1) {
  circle = 0;
 }
 for (var i = 0; i < ol.children.length; i++) {
  ol.children[i].className = '';
 }
 ol.children[circle].className = 'current';
 });
 //左侧按钮点击事件
 arrow_l.addEventListener('click', function() {
 if (num == 0) {
  num = ul.children.length - 1;
  ul.style.left = -num * focusWidth + 'px';

 }
 num--;
 animate(ul, -num * focusWidth);
 circle--;
 circle = circle < 0 ? ol.children.length - 1 : circle;
 // 调用函数
 circleChange();
 });
 //清除其余小圆圈的current类名
 function circleChange() {
 for (var i = 0; i < ol.children.length; i++) {
  ol.children[i].className = '';
 }
 // 留下当前的小圆圈的current类名
 ol.children[circle].className = 'current';
 }
 //动画函数
 function animate(obj, target, callback) {
 clearInterval(obj.timer);
 obj.timer = setInterval(function() {
  var step = (target - obj.offsetLeft) / 10;
  step = step > 0 ? Math.ceil(step) : Math.floor(step);
  if (obj.offsetLeft == target) {
  clearInterval(obj.timer);
  callback && callback();
  }
  obj.style.left = obj.offsetLeft + step + 'px';

 }, 15);
 }
 //自动轮播放轮播图
 var timer = setInterval(function() {
 //调用点击事件
 arrow_r.click();
 }, 2000);
});

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

Javascript 相关文章推荐
JS的递增/递减运算符和带操作的赋值运算符的等价式
Dec 08 Javascript
一个js导致的jquery失效问题的解决方法
Nov 27 Javascript
JS正则表达式修饰符global(/g)用法分析
Dec 27 Javascript
vue事件修饰符和按键修饰符用法总结
Jul 25 Javascript
微信小程序自定义模态对话框实例详解
Aug 16 Javascript
浅谈React组件之性能优化
Mar 02 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 Javascript
ES6 新增的创建数组的方法(小结)
Aug 01 Javascript
Vue函数式组件的应用实例详解
Aug 30 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
Nov 25 Javascript
基于Vue中的父子传值问题解决
Jul 27 Javascript
在vue-cli3中使用axios获取本地json操作
Jul 30 Javascript
js面向对象方式实现拖拽效果
Mar 03 #Javascript
Vue多选列表组件深入详解
Mar 02 #Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 #Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 #Vue.js
详解微信小程序(Taro)手动埋点和自动埋点的实现
Mar 02 #Javascript
vue脚手架项目创建步骤详解
Mar 02 #Vue.js
javascript实现简单页面倒计时
Mar 02 #Javascript
You might like
Yii操作数据库的3种方法
2014/03/11 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
HTML上传控件取消选择
2013/03/06 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
koa-router源码学习小结
2018/09/07 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
python Pygame的具体使用讲解
2017/11/03 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
Python requests设置代理的方法步骤
2020/02/23 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
记者岗位职责
2014/01/06 职场文书
简单的大学生自我鉴定
2014/02/18 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
钳工实训报告总结
2014/11/04 职场文书
获奖感言怎么写
2015/07/31 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技