原生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 相关文章推荐
自动更新作用
Oct 08 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
Nov 13 Javascript
js报$ is not a function 的问题的解决方法
Jan 20 Javascript
jQuery中noConflict()用法实例分析
Feb 08 Javascript
node+express+ejs使用模版引擎做的一个示例demo
Sep 18 Javascript
JavaScript模板引擎应用场景及实现原理详解
Dec 14 Javascript
[原创]微信小程序获取网络类型的方法示例
Mar 01 Javascript
seajs和requirejs模块化简单案例分析
Aug 26 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 Javascript
vue实现计算器功能
Feb 22 Javascript
解决vue的touchStart事件及click事件冲突问题
Jul 21 Javascript
微信小程序实现滚动Tab选项卡
Nov 16 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微信开发之查询城市天气
2016/06/23 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
js浮动图片的动态效果
2013/07/10 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
基于jQuery通过jQuery.form.js插件实现异步上传
2015/12/13 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
详解使用create-react-app快速构建React开发环境
2018/05/16 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
python unittest实现api自动化测试
2018/04/04 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
详解Python 切片语法
2019/06/10 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
如何用JQuery进行表单验证
2013/05/29 面试题
网吧最新创业计划书范文
2014/03/27 职场文书
环保建议书500字
2014/05/14 职场文书
质量负责人任命书
2014/06/06 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
Golang连接并操作MySQL
2022/04/14 MySQL