js实现自动播放匀速轮播图


Posted in Javascript onFebruary 06, 2020

本文实例为大家分享了js实现自动播放匀速轮播图的具体代码,供大家参考,具体内容如下

函数封装: ( 匀速运动函数)

function animate(obj,target,step,speed){
  clearInterval(obj.timer);
 var absStep = Math.abs(step); 
 step = target > obj.offsetLeft ? absStep : -absStep;
 obj.timer = setInterval(function(){
  var distance = Math.abs(target - obj.offsetLeft);
  obj.style.left = obj.offsetLeft + step + 'px';
  if(distance < absStep){
  clearInterval(obj.timer);
  obj.style.left = target + 'px';
  }
 },speed);
 }

对象可以动态生成属性,用对象的timer,避免了全局变量的使用,

实现步骤:

 1.动态生成ol导航条,并将导航条放入all中使其成为孩子节点
 2.根据ul中图片数量动态生成li标签,使li成为ol的子节点,
 3.给第0个li标签加上颜色(添加属性current)
 4.用设置的属性的值去操作图片使图片移动,达到鼠标放上去移动到该图片效果,排它原理实现样式效果
 5.深度克隆ul中的第一张图片并将图片放在ul的末尾
 6.加入自动播放函数使其自动播放,设置两个变量key,squre,key的值用来计算图片的序号,squre用来计算当前li的序号
 7.自动播放函数中排他原理设置当前li标签样式
 8.在设置onmouseover和onmouseout事件鼠标放在盒子上暂停,鼠标离开盒子,继续运动
 9.在鼠标放在li标签时让key等于当前图片的index属性值 ,并把key的值赋给squre。

实现细节:

1.动态给ul克隆出第0张图片补到末尾,以实现自动轮播是无缝的效果,
2.克隆分深克隆和浅克隆,深克隆克隆带标签内的所有内容,
3.浅克隆只克隆外部标签,深克隆参数为true

效果:

js实现自动播放匀速轮播图

代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>匀速轮播动画</title>
<style type="text/css">
 *{ padding:0; margin:0; list-style:none; border:0;}
 .all{
 width:500px;
 height:200px;
 padding:7px;
 border:1px solid #ccc;
 margin:100px auto;
 position:relative;
 }
 .screen{
 width:500px;
 height:200px;
 overflow:hidden; 
 position:relative;
 }

 .screen li{ 
 width:500px; 
 height:200px; 
 overflow:hidden; 
 float:left;
 }
 .screen ul{ 
 position:absolute;
 left:0; 
 top:0px;
 width:3000px;
 }
 .all ol{ 
 position:absolute; 
 right:10px; 
 bottom:10px;
 line-height:20px;
 text-align:center;
 }
 .all ol li{ 
 float:left; 
 width:20px; 
 height:20px; 
 background:#fff; 
 border:1px solid #ccc; 
 margin-left:10px; 
 cursor:pointer;
 }
 .all ol li.current{ 
 background:yellow;
 }
</style>
<script src="js/匀速运动.js"></script>
<script>
 function $(id){
  return document.getElementById(id);
 }
 window.onload = function(){
  var ul = $('ul');
  var all = $('all');
  var imgs = ul.getElementsByTagName('img');
  var ol = document.createElement('ol');
  all.appendChild(ol);
  for(var i=0;i<imgs.length;i++){
   var li = document.createElement('li');
   li.innerHTML = i+1;
   li.setAttribute('index',i);
   ol.appendChild(li);
  }
  ol.childNodes[0].className = 'current';
 
  var olLis = ol.children;
  for(var i=0;i<olLis.length;i++){
   olLis[i].onmouseover = function(){
    for(var j=0;j<olLis.length;j++){
     olLis[j].className = '';
    }
    this.className = 'current';
    var index = -500*this.getAttribute('index');
    animate(ul,index,20,10);
    key=this.getAttribute('index');
    squre = key;
   }
  }

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

  var timer=null;
  var key=0;
  var squre = 0;
  timer=setInterval(autoPlay, 1000);
   function autoPlay(){
   key++; //记录图片
   squre++;//记录导航条
   if(key>olLis.length){
    key=1;
    ul.style.left = 0 + 'px';
   }
   if(squre>=olLis.length){
    squre = 0;
   }
   animate(ul,-500*key,20,10);
   for(var i=0;i<olLis.length;i++){
    olLis[i].className = '';
   }
   olLis[squre].className = 'current';
   }
   all.onmouseover = function(){
   clearInterval(timer);
   }
   all.onmouseout = function(){
  timer=setInterval(autoPlay, 1000);
   }
 }
</script>
</head>
<body>
<div class="all" id='all'>
 <div class="screen">
  <ul id="ul">
   <li><img src="images/taobao/1.jpg" width="500" height="200" /></li>
   <li><img src="images/taobao/2.jpg" width="500" height="200" /></li>
   <li><img src="images/taobao/3.jpg" width="500" height="200" /></li>
   <li><img src="images/taobao/4.jpg" width="500" height="200" /></li>
   <li><img src="images/taobao/5.jpg" width="500" height="200" /></li>
  </ul>
 </div>

</div>
</body>
</html>

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

Javascript 相关文章推荐
JS查看对象功能代码
Apr 25 Javascript
javascript模仿msgbox提示效果代码
Jun 10 Javascript
jQuery$命名冲突怎么办如何解决
Jan 16 Javascript
js操作输入框提示信息且响应鼠标事件
Mar 25 Javascript
jQuery实现图片左右滚动特效
Apr 20 Javascript
三种带箭头提示框总结实例
Jun 14 Javascript
关于JavaScript中事件绑定的方法总结
Oct 26 Javascript
Node.js利用debug模块打印出调试日志的方法
Apr 25 Javascript
微信小程序实现给循环列表添加点击样式实例
Apr 26 Javascript
VUE2实现事件驱动弹窗示例
Oct 21 Javascript
socket在egg中的使用实例代码详解
May 30 Javascript
js实现带有动画的返回顶部
Aug 09 Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 #Javascript
vue 检测用户上传图片宽高的方法
Feb 06 #Javascript
vue中对象数组去重的实现
Feb 06 #Javascript
2019最新21个MySQL高频面试题介绍
Feb 06 #Javascript
node.JS路径解析之PATH模块使用方法详解
Feb 06 #Javascript
node.JS二进制操作模块buffer对象使用方法详解
Feb 06 #Javascript
JavaScript实现左右滚动电影画布
Feb 06 #Javascript
You might like
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
Python中循环引用(import)失败的解决方法
2018/04/22 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
大专自我鉴定范文
2013/10/23 职场文书
缓刑人员的思想汇报
2014/01/11 职场文书
应届优秀本科大学毕业生自我鉴定
2014/01/21 职场文书
三下乡活动方案
2014/01/31 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
毕业生实习证明
2014/09/19 职场文书
小学中等生评语
2014/12/29 职场文书
校友回访母校寄语
2015/02/26 职场文书
辞职信格式模板
2015/02/27 职场文书
应收账款管理制度
2015/08/06 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书