原生JS实现匀速图片轮播动画


Posted in Javascript onOctober 18, 2016

JS实现轮播图实现结果图:

原生JS实现匀速图片轮播动画

需求:
1 根据图片动态添加小圆点
2 目标移动到小圆点轮播图片
3 鼠标离开图片,定时轮播图片;鼠标在图片上时暂停
4  左右两侧可点击轮播图片    

一、布局部分

html部分

<div class="w main clearfix"><!--主内容部分开始-->
<div class="slider"><!--轮播图部分开始-->
 <ul class="imgs" id="slider_imgs">
  <li><img src="images/slider01.jpg" id="slider1" alt=""/>
  </li>
  <li><img src="images/slider02.jpg" id="slider2" alt=""/>
  </li>
  <li><img src="images/slider03.jpg" id="slider3" alt=""/>
  </li>
  <li><img src="images/slider04.jpg" id="slider4" alt=""/>
  </li>
  <li><img src="images/slider05.jpg" id="slider5" alt=""/>
  </li>
  <li><img src="images/slider01.jpg" id="slider0" alt=""/>
  </li>
 </ul>
  <div class="arrow" id="arrow">
  <a href="javascript:;" class="arrow_1"><</a>
  <a href="javascript:;" class="arrow_2">></a>
  </div>
 </div><!--轮播图部分结束-->
 </div>

css部分

.slider ul.imgs{height:453px;width:4380px;position:absolute;}
.slider ul.imgs li{display:block; width:730px;height:453px;float:left;}
.slider .circle{position:absolute;left:50%;bottom:8px;}
.slider .circle li{cursor:pointer;float:left;width:18px;height:18px;margin:4px;background-color:#3e3e3e;border-radius: 50%;text-align: center;color:#fff;}
.slider .circle li.current{background:pink;color:white;}

JS部分

1这是匀速动画函数的封装

/*
***obj:做动画的DOM对象
***target:对象最终运动到的目标位置(X轴)
*/
function animate(obj,target) {

//每次调用要先清定时器
  clearInterval(obj.Timer);

//根据目标位置判断移动的方向,每到目标位置步长为20,否则为-20
  var speed = target>obj.offsetLeft?20:-20;

  obj.Timer =setInterval(function () {

   var left = obj.offsetLeft;

   obj.style.left = left+speed+"px";

   var result = target-left;

//目标位置与当前位置在步长20以内,则到达目标位置
   if(Math.abs(result)<=20){

//停止运动
    clearInterval(obj.Timer);

//有20像素差距 我们直接跳转目标位置
    obj.style.left=target+ "px";

   }

  },2函数:

`这里写代码片0);

 }

轮播图封装函数:

function slider(){
   //焦点图信息DOM节点
   var imgs=document.getElementById("slider_imgs");
   var slides =imgs.parentNode;
   var lis =imgs.getElementsByTagName("li");
   var arrows = document.getElementById("arrow");
   var arrowLink=arrows.children;
   //创建小圆点
   var circle=document.createElement("ol");
   circle.setAttribute("class","circle");
   imgs.parentNode.appendChild(circle);

   for(var i=0,len=lis.length-1;i<len;i++){
    var li =document.createElement("li");
    li.innerHTML = i+1;
    circle.appendChild(li);
   }
   //marginLeft=-imgli(length)*olLi(width)/2
   circle.style.marginLeft = (-13*len)+"px";
   var olLis =circle.children;

   olLis[0].className="current";
   //为小圆点添加鼠标事件
   for(var i=0;i<olLis.length;i++){
  //当前小圆点索引
    olLis[i].index = i;
    olLis[i].onmouseover=function () {

     for(var j=0;j<olLis.length;j++) {
      olLis[j].className = "";
     }
     this.className="current";
     //图片切换 imgs的CSS部分加上定位
     animate(imgs,this.index*(-lis[0].offsetWidth));
   //当鼠标挪到定时器,当前播放图片与原点位置回原
     k=z=p=q=this.index;

    };


   }

//鼠标移动到轮播图,不定时播放
   slides.onmouseover=function () {
 //清除自动轮播定时器
    clearInterval(Time);
   };
//鼠标移开,自动轮播    
   slides.onmouseout=function () {
    Time =setInterval(autoPlay,1000);
   };
//定时器部分   
   var Time=null,k=0,z=0;
   Time=setInterval(autoPlay,1000);
   //自动轮播图片,定时器Time
   function autoPlay() {
    k++;
    if(k>lis.length-1){
     imgs.style.left=0;
     k=1;
    }
    animate(imgs,k*(-lis[0].offsetWidth));
    z++;
    if(z>olLis.length-1){
     z=0;
    }
    for(var j=0;j<olLis.length;j++) {
     olLis[j].className = "";
    }
    olLis[z].className="current";
   }
   var q=0;var p=0;
   arrowLink[1].onclick=function () {
    q++;
    if(q>lis.length-1){
     imgs.style.left=0;
     q=1;
    }
    p++;
    if(p>olLis.length-1){
     p=0;
    }
    for(var j=0;j<olLis.length;j++) {
     olLis[j].className = "";
    }
    olLis[p].className="current";
    animate(imgs,q*(-lis[0].offsetWidth));
   }


  }

精彩专题分享:jQuery图片轮播 JavaScript图片轮播 Bootstrap图片轮播

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

Javascript 相关文章推荐
jquery插件Jplayer使用方法简析
Apr 22 Javascript
Websocket协议详解及简单实例代码
Dec 12 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 jQuery
JS获取鼠标位置距浏览器窗口距离的方法示例
Apr 11 Javascript
Angular 1.x个人使用的经验小结
Jul 19 Javascript
使用veloticy-ui生成文字动画效果
Feb 08 Javascript
angular第三方包开发整理(小结)
Apr 19 Javascript
深入解析ES6中的promise
Nov 08 Javascript
vue强制刷新组件的方法示例
Feb 28 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
May 22 Javascript
五分钟搞懂Vuex实用知识(小结)
Aug 12 Javascript
jquery对象和DOM对象的相互转换详解
Oct 18 #Javascript
原生js实现网易轮播图效果
Apr 10 #Javascript
浅谈bootstrap使用中的一些问题以及解决过程
Oct 18 #Javascript
JSON对象 详解及实例代码
Oct 18 #Javascript
简易的JS计算器实现代码
Oct 18 #Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
Oct 18 #Javascript
jquery中用jsonp实现搜索框功能
Oct 18 #Javascript
You might like
一个自定义位数的php多用户计数器代码
2007/03/11 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
[46:21]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
Python实现微信机器人的方法
2019/09/06 Python
python批量修改交换机密码的示例
2020/09/22 Python
橄榄树药房:OLIVEDA
2019/09/01 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
程序员机试试题汇总
2012/03/07 面试题
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
新学期班主任寄语
2014/01/18 职场文书
综治维稳工作汇报
2014/10/27 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
2016党员入党决心书
2015/09/22 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
总结几个非常实用的Python库
2021/06/26 Python
Java使用jmeter进行压力测试
2021/07/09 Java/Android
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js