js原生轮播图

不念不忘少年蓝@ 2023-07-07 08:22 133阅读 0赞
  1. window.addEventListener('load', function() {
  2. // 1. 获取元素
  3. var arrow_l = document.querySelector('.arrow-l');
  4. var arrow_r = document.querySelector('.arrow-r');
  5. var focus = document.querySelector('.focus');
  6. var focusWidth = focus.offsetWidth;
  7. // 2. 鼠标经过focus 就显示隐藏左右按钮
  8. focus.addEventListener('mouseenter', function() {
  9. arrow_l.style.display = 'block';
  10. arrow_r.style.display = 'block';
  11. clearInterval(timer);
  12. timer = null; // 清除定时器变量
  13. });
  14. focus.addEventListener('mouseleave', function() {
  15. arrow_l.style.display = 'none';
  16. arrow_r.style.display = 'none';
  17. timer = setInterval(function() {
  18. //手动调用点击事件
  19. arrow_r.click();
  20. }, 2000);
  21. });
  22. // 3. 动态生成小圆圈 有几张图片,我就生成几个小圆圈
  23. var ul = focus.querySelector('ul');
  24. var ol = focus.querySelector('.circle');
  25. // console.log(ul.children.length);
  26. for (var i = 0; i < ul.children.length; i++) {
  27. // 创建一个小li
  28. var li = document.createElement('li');
  29. // 记录当前小圆圈的索引号 通过自定义属性来做
  30. li.setAttribute('index', i);
  31. // 把小li插入到ol 里面
  32. ol.appendChild(li);
  33. // 4. 小圆圈的排他思想 我们可以直接在生成小圆圈的同时直接绑定点击事件
  34. li.addEventListener('click', function() {
  35. // 干掉所有人 把所有的小li 清除 current 类名
  36. for (var i = 0; i < ol.children.length; i++) {
  37. ol.children[i].className = '';
  38. }
  39. // 留下我自己 当前的小li 设置current 类名
  40. this.className = 'current';
  41. // 5. 点击小圆圈,移动图片 当然移动的是 ul
  42. // ul 的移动距离 小圆圈的索引号 乘以 图片的宽度 注意是负值
  43. // 当我们点击了某个小li 就拿到当前小li 的索引号
  44. var index = this.getAttribute('index');
  45. // 当我们点击了某个小li 就要把这个li 的索引号给 num
  46. num = index;
  47. // 当我们点击了某个小li 就要把这个li 的索引号给 circle
  48. circle = index;
  49. // num = circle = index;
  50. console.log(focusWidth);
  51. console.log(index);
  52. animate(ul, -index * focusWidth);
  53. })
  54. }
  55. // 把ol里面的第一个小li设置类名为 current
  56. ol.children[0].className = 'current';
  57. // 6. 克隆第一张图片(li)放到ul 最后面
  58. var first = ul.children[0].cloneNode(true);
  59. ul.appendChild(first);
  60. // 7. 点击右侧按钮, 图片滚动一张
  61. var num = 0;
  62. // circle 控制小圆圈的播放
  63. var circle = 0;
  64. // flag 节流阀
  65. var flag = true;
  66. arrow_r.addEventListener('click', function() {
  67. if (flag) {
  68. flag = false; // 关闭节流阀
  69. // 如果走到了最后复制的一张图片,此时 我们的ul 要快速复原 left 改为 0
  70. if (num == ul.children.length - 1) {
  71. ul.style.left = 0;
  72. num = 0;
  73. }
  74. num++;
  75. animate(ul, -num * focusWidth, function() {
  76. flag = true; // 打开节流阀
  77. });
  78. // 8. 点击右侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放
  79. circle++;
  80. // 如果circle == 4 说明走到最后我们克隆的这张图片了 我们就复原
  81. if (circle == ol.children.length) {
  82. circle = 0;
  83. }
  84. // 调用函数
  85. circleChange();
  86. }
  87. });
  88. // 9. 左侧按钮做法
  89. arrow_l.addEventListener('click', function() {
  90. if (flag) {
  91. flag = false;
  92. if (num == 0) {
  93. num = ul.children.length - 1;
  94. ul.style.left = -num * focusWidth + 'px';
  95. }
  96. num--;
  97. animate(ul, -num * focusWidth, function() {
  98. flag = true;
  99. });
  100. // 点击左侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放
  101. circle--;
  102. // 如果circle < 0 说明第一张图片,则小圆圈要改为第4个小圆圈(3)
  103. // if (circle < 0) {
  104. // circle = ol.children.length - 1;
  105. // }
  106. circle = circle < 0 ? ol.children.length - 1 : circle;
  107. // 调用函数
  108. circleChange();
  109. }
  110. });
  111. function circleChange() {
  112. // 先清除其余小圆圈的current类名
  113. for (var i = 0; i < ol.children.length; i++) {
  114. ol.children[i].className = '';
  115. }
  116. // 留下当前的小圆圈的current类名
  117. ol.children[circle].className = 'current';
  118. }
  119. // 10. 自动播放轮播图
  120. var timer = setInterval(function() {
  121. //手动调用点击事件
  122. arrow_r.click();
  123. }, 2000);
  124. })

发表评论

表情:
评论列表 (有 0 条评论,133人围观)

还没有评论,来说两句吧...

相关阅读

    相关 原生js层叠

    前言: 已经一个月没有怎么更博了,一直在学习一些其他得。之前在网上看到一个层叠样式得轮播图,也是看过一个博主得内容以后自己又理清楚了思路才写出来。 原文出处:https:

    相关 原生js实现

            很多很多网站经常会用到一个特效,那就是轮播图,对于日新月异的前端技术来说其实就是一个框架一个接口的事,但轮播的原理是什么?用最原始的javascript来写又是

    相关 原生js实现

    轮播图基本上是前端所必须面临的一个功能。而且在网上可以找到各种各样的插件或者写法。 但是我个人觉得还是写一下比较好。这里用到的是原生JS、CSS3相结合的写法。 对IE 8

    相关 原生js实现

    原生js实现轮播图  很多网站上都有轮播图,但却很难找到一个系统讲解的,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出。  [