基于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插件之多图片异步上传
Oct 20 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
Sep 11 Javascript
extjs 04_grid 单击事件新发现
Nov 27 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
Aug 21 Javascript
jquery基础教程之deferred对象使用方法
Jan 22 Javascript
jQuery中$.extend()用法实例
Jun 24 Javascript
jQuery validate验证插件使用详解
May 11 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
Nov 27 Javascript
基于ajax和jsonp的原生封装(实例)
Oct 16 Javascript
JavaScript满天星导航栏实现方法
Mar 08 Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 Javascript
vue实现一拉到底的滑动验证
Jul 25 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
PHP 转义使用详解
2013/07/15 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
javascript之学会吝啬 精简代码
2010/04/25 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python 算法 排序实现快速排序
2012/06/05 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
Python对切片命名的实现方法
2018/10/16 Python
python yield关键词案例测试
2019/10/15 Python
python实现滑雪者小游戏
2020/02/22 Python
Python是什么 Python的用处
2020/05/26 Python
Python sublime安装及配置过程详解
2020/06/29 Python
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
2013英文求职信模板范文
2013/11/15 职场文书
绿色学校实施方案
2014/03/31 职场文书
售房协议书
2014/08/19 职场文书