原生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解析XML文件同时动态增加js文件的方法
Jun 01 Javascript
CSS图片响应式 垂直水平居中
Aug 14 Javascript
javascript中JSON.parse()与eval()解析json的区别
May 19 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
Aug 14 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
在vue项目中使用sass的配置方法
Mar 20 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
Apr 22 Javascript
使用jQuery给Table动态增加行、清空table的方法
Sep 05 jQuery
详解关于Vue2.0路由开启keep-alive时需要注意的地方
Sep 18 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
May 14 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
Vue 全局loading组件实例详解
2018/05/29 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
js实现点赞效果
2020/03/16 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
深入学习python的yield和generator
2016/03/10 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
详解Python字典的操作
2019/03/04 Python
Python调用C语言的实现
2019/07/26 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
VC++笔试题
2014/10/13 面试题
SQL Server数据库笔试题和答案
2016/02/04 面试题
实习老师个人总结的自我评价
2013/09/28 职场文书
网吧消防安全责任书
2014/07/29 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
毕业证代领委托书
2014/09/26 职场文书