原生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 相关文章推荐
关于文本框的一些限制控制总结~~
Apr 15 Javascript
js获取多个tagname的节点数组
Sep 22 Javascript
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
Javascript定义类(class)的三种方法详解
Mar 13 Javascript
javascript事件冒泡实例分析
May 13 Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 Javascript
多个js毫秒倒计时同时进行效果
Jan 05 Javascript
jQuery日期范围选择器附源码下载
May 23 jQuery
静态页面实现 include 引入公用代码的示例
Sep 25 Javascript
vue路由守卫及路由守卫无限循环问题详析
Sep 05 Javascript
vue 实现LED数字时钟效果(开箱即用)
Dec 08 Javascript
原生js实现简单轮播图
Oct 26 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通过修改header强制图片下载的方法
2015/03/24 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
jquery 手势密码插件
2017/03/17 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
2019/09/21 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
在Python中使用异步Socket编程性能测试
2014/06/25 Python
Python 备份程序代码实现
2017/03/06 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
python从PDF中提取数据的示例
2020/10/30 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
西部世纪面试题
2014/12/05 面试题
网页设计个人找工作求职信
2013/11/28 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
感谢信模板大全
2015/01/23 职场文书
会议简报格式范文
2015/07/20 职场文书