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 相关文章推荐
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
Nov 16 Javascript
Jquery基础教程之DOM操作
Aug 19 Javascript
jQuery通过deferred对象管理ajax异步
May 20 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
Feb 22 Javascript
Bootstrap面板(Panels)的简单实现代码
Mar 17 Javascript
作为老司机使用 React 总结的 11 个经验教训
Apr 08 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
Jul 04 jQuery
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 Javascript
Vue中用props给data赋初始值遇到的问题解决
Nov 27 Javascript
微信小程序获取当前位置和城市名
Nov 13 Javascript
vue项目实现减少app.js和vender.js的体积操作
Nov 12 Javascript
Vertx基于EventBus发送接受自定义对象
Nov 16 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
php allow_url_include的应用和解释
2010/04/22 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
禁止F5等快捷键的JS代码
2007/03/06 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
VSCode launch.json配置详细教程
2020/06/18 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
tornado 多进程模式解析
2018/01/15 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
python 字典中取值的两种方法小结
2018/08/02 Python
python看某个模块的版本方法
2018/10/16 Python
Python3.5运算符操作实例详解
2019/04/25 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
详解anaconda安装步骤
2020/11/23 Python
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
幼儿园课题实施方案
2014/05/14 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python