当前位置:Gxlcms > JavaScript > 原生JS实现匀速图片轮播动画

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

时间:2021-07-01 10:21:17 帮助过:39人阅读

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

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

一、布局部分

html部分

  1. <div class="w main clearfix"><!--主内容部分开始-->
  2. <div class="slider"><!--轮播图部分开始-->
  3. <ul class="imgs" id="slider_imgs">
  4. <li><img src="images/slider01.jpg" id="slider1" alt=""/>
  5. </li>
  6. <li><img src="images/slider02.jpg" id="slider2" alt=""/>
  7. </li>
  8. <li><img src="images/slider03.jpg" id="slider3" alt=""/>
  9. </li>
  10. <li><img src="images/slider04.jpg" id="slider4" alt=""/>
  11. </li>
  12. <li><img src="images/slider05.jpg" id="slider5" alt=""/>
  13. </li>
  14. <li><img src="images/slider01.jpg" id="slider0" alt=""/>
  15. </li>
  16. </ul>
  17. <div class="arrow" id="arrow">
  18. <a href="javascript:;" class="arrow_1"><</a>
  19. <a href="javascript:;" class="arrow_2">></a>
  20. </div>
  21. </div><!--轮播图部分结束-->
  22. </div>

css部分

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

JS部分

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

  1. /*
  2. ***obj:做动画的DOM对象
  3. ***target:对象最终运动到的目标位置(X轴)
  4. */
  5. function animate(obj,target) {
  6. //每次调用要先清定时器
  7. clearInterval(obj.Timer);
  8. //根据目标位置判断移动的方向,每到目标位置步长为20,否则为-20
  9. var speed = target>obj.offsetLeft?20:-20;
  10. obj.Timer =setInterval(function () {
  11. var left = obj.offsetLeft;
  12. obj.style.left = left+speed+"px";
  13. var result = target-left;
  14. //目标位置与当前位置在步长20以内,则到达目标位置
  15. if(Math.abs(result)<=20){
  16. //停止运动
  17. clearInterval(obj.Timer);
  18. //有20像素差距 我们直接跳转目标位置
  19. obj.style.left=target+ "px";
  20. }
  21. },2函数:
  22. `这里写代码片0);
  23. }

轮播图封装函数:

  1. function slider(){
  2. //焦点图信息DOM节点
  3. var imgs=document.getElementById("slider_imgs");
  4. var slides =imgs.parentNode;
  5. var lis =imgs.getElementsByTagName("li");
  6. var arrows = document.getElementById("arrow");
  7. var arrowLink=arrows.children;
  8. //创建小圆点
  9. var circle=document.createElement("ol");
  10. circle.setAttribute("class","circle");
  11. imgs.parentNode.appendChild(circle);
  12. for(var i=0,len=lis.length-1;i<len;i++){
  13. var li =document.createElement("li");
  14. li.innerHTML = i+1;
  15. circle.appendChild(li);
  16. }
  17. //marginLeft=-imgli(length)*olLi(width)/2
  18. circle.style.marginLeft = (-13*len)+"px";
  19. var olLis =circle.children;
  20. olLis[0].className="current";
  21. //为小圆点添加鼠标事件
  22. for(var i=0;i<olLis.length;i++){
  23. //当前小圆点索引
  24. olLis[i].index = i;
  25. olLis[i].onmouseover=function () {
  26. for(var j=0;j<olLis.length;j++) {
  27. olLis[j].className = "";
  28. }
  29. this.className="current";
  30. //图片切换 imgs的CSS部分加上定位
  31. animate(imgs,this.index*(-lis[0].offsetWidth));
  32. //当鼠标挪到定时器,当前播放图片与原点位置回原
  33. k=z=p=q=this.index;
  34. };
  35. }
  36. //鼠标移动到轮播图,不定时播放
  37. slides.onmouseover=function () {
  38. //清除自动轮播定时器
  39. clearInterval(Time);
  40. };
  41. //鼠标移开,自动轮播
  42. slides.onmouseout=function () {
  43. Time =setInterval(autoPlay,1000);
  44. };
  45. //定时器部分
  46. var Time=null,k=0,z=0;
  47. Time=setInterval(autoPlay,1000);
  48. //自动轮播图片,定时器Time
  49. function autoPlay() {
  50. k++;
  51. if(k>lis.length-1){
  52. imgs.style.left=0;
  53. k=1;
  54. }
  55. animate(imgs,k*(-lis[0].offsetWidth));
  56. z++;
  57. if(z>olLis.length-1){
  58. z=0;
  59. }
  60. for(var j=0;j<olLis.length;j++) {
  61. olLis[j].className = "";
  62. }
  63. olLis[z].className="current";
  64. }
  65. var q=0;var p=0;
  66. arrowLink[1].onclick=function () {
  67. q++;
  68. if(q>lis.length-1){
  69. imgs.style.left=0;
  70. q=1;
  71. }
  72. p++;
  73. if(p>olLis.length-1){
  74. p=0;
  75. }
  76. for(var j=0;j<olLis.length;j++) {
  77. olLis[j].className = "";
  78. }
  79. olLis[p].className="current";
  80. animate(imgs,q*(-lis[0].offsetWidth));
  81. }
  82. }

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

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

人气教程排行