基于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 相关文章推荐
jquery清空textarea等输入框实现代码
Apr 22 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
JavaScript+html5 canvas实现本地截图教程
Apr 16 Javascript
如何防止INPUT按回车自动提交表单FORM
Dec 06 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
Jan 23 Javascript
基于Node.js的WebSocket通信实现
Mar 11 Javascript
Node.js连接mongodb实例代码
Jun 06 Javascript
利用JS测试目标网站的打开响应速度
Dec 01 Javascript
Vue使用预渲染代替SSR的方法
Jul 02 Javascript
jQuery实现评论模块
Aug 19 jQuery
vue 全局封装loading加载教程(全局监听)
Nov 05 Javascript
Vue Element plus使用方法梳理
Dec 24 Vue.js
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
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
PHP生成唯一订单号
2015/07/05 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
javascript 面向对象编程基础:封装
2009/08/21 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
详细分析单线程JS执行问题
2017/11/22 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
Python中super函数用法实例分析
2019/03/18 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
世界上最伟大的马产品:Equiderma
2020/01/07 全球购物
一套C++笔试题面试题
2012/06/06 面试题
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
教师自荐书
2013/10/08 职场文书
手机被没收检讨书
2014/02/22 职场文书
夏季药店促销方案
2014/08/22 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
Java 数组的使用
2022/05/11 Java/Android