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 相关文章推荐
关于图片验证码设计的思考
Jan 29 Javascript
jquery.lazyload  实现图片延迟加载jquery插件
Feb 06 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
Mar 28 Javascript
js同源策略详解
May 21 Javascript
全面解析Bootstrap中nav、collapse的使用方法
May 22 Javascript
js实现固定宽高滑动轮播图效果
Jan 13 Javascript
Three.js利用dat.GUI如何简化试验流程详解
Sep 26 Javascript
详解vue-loader在项目中是如何配置的
Jun 04 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
Aug 16 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
JavaScript中构造函数与原型链之间的关系详解
Feb 25 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
Aug 14 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+mysql保存和输出文件
2006/10/09 PHP
一步一步学习PHP(3) php 函数
2010/02/15 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
php中的动态调用实例分析
2015/01/07 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
浅谈Javascript数据属性与访问器属性
2016/07/26 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
vue项目持久化存储数据的实现代码
2018/10/01 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
简单实现python进度条脚本
2017/12/18 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
python移位运算的实现
2019/07/15 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
python使用列表的最佳方案
2020/08/12 Python
介绍一下如何优化MySql
2016/12/20 面试题
应聘护士自荐信
2013/10/21 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
教师个人事迹材料
2014/12/17 职场文书
医德医风自我评价2015
2015/03/03 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书