原生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 相关文章推荐
JSON 入门指南 想了解json的朋友可以看下
Aug 26 Javascript
javascript 设置某DIV区域内的checkbox复选框
Nov 30 Javascript
IE6下JS动态设置图片src地址问题
Jan 08 Javascript
javascript 二分法(数组array)
Apr 24 Javascript
登陆成功后自动计算秒数执行跳转
Jan 23 Javascript
js获取元素的外链样式的简单实现方法
Jun 06 Javascript
JavaScript基于原型链的继承
Jun 22 Javascript
jQuery实现优雅的弹窗效果(6)
Feb 08 Javascript
JS+canvas动态绘制饼图的方法示例
Sep 12 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
Sep 18 Javascript
vue+element-ui动态生成多级表头的方法
Aug 28 Javascript
原生js无缝轮播插件使用详解
Mar 09 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下MYSQL limit的优化
2008/01/10 PHP
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
AngularJS下对数组的对比分析
2016/08/24 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
深入理解javascript中的this
2021/02/08 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
Python字典操作简明总结
2015/04/13 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
社区党建工作方案
2014/06/10 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
日元符号 ¥
2022/02/17 杂记