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 获取浏览器和屏幕宽高等信息代码
Mar 31 Javascript
JavaScript框架(iframe)操作总结
Apr 16 Javascript
jQuery实现宽屏图片轮播实例教程
Nov 24 Javascript
JS绘制微信小程序画布时钟
Dec 24 Javascript
iview给radio按钮组件加点击事件的实例
Sep 30 Javascript
Vue全局分页组件的实现代码
Aug 10 Javascript
前端js中的事件循环eventloop机制详解
May 15 Javascript
vue在路由中验证token是否存在的简单实现
Nov 11 Javascript
Windows下安装 node 的版本控制工具 nvm
Feb 06 Javascript
JS实现前端动态分页码代码实例
Jun 02 Javascript
node.js通过Sequelize 连接MySQL的方法
Dec 28 Javascript
webpack的移动端适配方案小结
Jul 25 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自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
超清晰的document对象详解
2007/02/27 Javascript
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
封装html的select标签的js操作实例
2013/07/02 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
python数据预处理方式 :数据降维
2020/02/24 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
德国网上药房:Apotal
2017/04/04 全球购物
香港礼品网站:GiftU eshop
2017/09/01 全球购物
《灰椋鸟》教学反思
2014/04/27 职场文书
2016读书月活动心得体会
2016/01/14 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers