最简单的原生js轮播图(适合新手)

怼烎@ 2022-05-23 01:48 205阅读 0赞
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <script src="jquery.js"></script>
  9. <style>
  10. *{
  11. margin: 0px;
  12. padding:0px;
  13. list-style: none;
  14. text-decoration: none;
  15. }
  16. #flash{ /*根据图片的大小来设置外层div的大小*/
  17. width: 520px;
  18. height: 280px;
  19. margin: 0 auto;
  20. position: relative; /*设置div定位,方便之后图片及圆点位置的设定*/
  21. border:1px solid black;
  22. }
  23. #flash img{
  24. width: 100%;
  25. height: 100%;
  26. position: absolute; /*设置所有图片重叠*/
  27. left: 0px;
  28. top: 0px;
  29. display: none; /*设置所有图片隐藏,通过改变第一个图片的行间样式来使第一个图片显示*/
  30. }
  31. #flash ul{
  32. width: 150px;
  33. height: 25px;
  34. border-radius: 20px;
  35. background-color:rgba(255,255,255,0.5);
  36. position: absolute;
  37. left: 35%;
  38. bottom: 10%;
  39. }
  40. #flash ul li{
  41. width: 12px;
  42. height: 12px;
  43. margin-top:5px;
  44. background-color: #fff;
  45. border-radius: 50%;
  46. margin-left: 15px;
  47. float: left;
  48. }
  49. #flash ul .li_1{
  50. background-color: #f40; /*设置第一个圆点背景色为红色*/
  51. }
  52. #flash .span-r{
  53. width: 50px;
  54. height: 50px;
  55. border-radius: 50%;
  56. position: absolute;
  57. right: 2%;
  58. top: 45%;
  59. background-color: rgba(255,255,255,0.5);
  60. }
  61. #flash .span-r span{
  62. width: 100%;
  63. height:100%;
  64. color:rgba(0,0,0,0.5);
  65. font-size: xx-large;
  66. font-weight: 700;
  67. line-height: 50px;
  68. margin-left: 15px;
  69. cursor: pointer;
  70. }
  71. #flash .span-l{
  72. width: 50px;
  73. height: 50px;
  74. border-radius: 50%;
  75. position: absolute;
  76. left: 2%;
  77. top: 45%;
  78. background-color: rgba(255,255,255,0.5);
  79. }
  80. #flash .span-l span{
  81. width: 100%;
  82. height:100%;
  83. color:rgba(0,0,0,0.5);
  84. font-size: xx-large;
  85. font-weight: 700;
  86. line-height: 50px;
  87. margin-left: 15px;
  88. cursor: pointer;
  89. }
  90. </style>
  91. </head>
  92. <div id="flash">
  93. <img src="img1.jpg" alt="" style="display: block">
  94. <img src="img2.jpg" alt="">
  95. <img src="img3.jpg" alt="">
  96. <img src="img4.jpg" alt="">
  97. <img src="img5.jpg" alt="">
  98. <ul>
  99. <li class="li_1"></li>
  100. <li></li>
  101. <li></li>
  102. <li></li>
  103. <li></li>
  104. </ul>
  105. <div class="span-r">
  106. <span>></span>
  107. </div>
  108. <div class="span-l">
  109. <span><</span>
  110. </div>
  111. </div>
  112. <body>
  113. <script>
  114. var div = document.getElementById('flash');
  115. var img = div.getElementsByTagName('img'); /*选中div下所有的图片*/
  116. var ul = document.getElementsByTagName('ul')[0];
  117. var li = ul.getElementsByTagName('li');
  118. var div_r = document.getElementsByTagName('div')[1];
  119. // var span_r = div_r.getElementsByTagName('span');
  120. var div_l = document.getElementsByTagName('div')[2];
  121. // var sapn_l = div_l.getElementsByTagName('span');
  122. var len = img.length;
  123. var count = 0; /*设置count来显示当前图片的序号*/
  124. function run(){ /*将定时器里的函数提取到外部*/
  125. count++;
  126. count = count==5?0:count; /*当图片加载到最后一张时,使其归零*/
  127. for(var i=0;i<len;i++){
  128. img[i].style.display = 'none'; /*利用for循环使除当前count位其他图片隐藏*/
  129. }
  130. img[count].style.display = 'block'; /*显示当前count的值所代表的图片*/
  131. for(var i=0;i<li.length;i++){
  132. li[i].style.backgroundColor = "#fff"; /*原理同上*/
  133. }
  134. li[count].style.backgroundColor = "#f40";
  135. }
  136. var timer = setInterval(run,1000); /*定义定时器,使图片每隔1s更换一次*/
  137. div.onmouseover = function(){
  138. clearInterval(timer);
  139. }
  140. div.onmouseleave = function(){ /*定义鼠标移出事件,当鼠标移出div区域,轮播继续*/
  141. timer = setInterval(run,1000);
  142. }
  143. for(var i=0;i<len;i++){
  144. li[i].index = i; /*定义index记录当前鼠标在li的位置*/
  145. li[i].onmouseenter = function(){ /*定义鼠标经过事件*/
  146. for(var i=0;i<len;i++){ /*通过for循环将所有图片隐藏,圆点背景设为白色*/
  147. li[i].style.background = '#fff';
  148. img[i].style.display = 'none';
  149. }
  150. this.style.background = '#f40'; /*设置当前所指圆点的背景色*/
  151. img[this.index].style.display = 'block'; /*使圆点对应的图片显示*/
  152. }
  153. }
  154. div_r.onclick = function(){ /*因为span没有设置宽高,直接把事件添加到他的父级*/
  155. run(); /*直接调用现成的run函数*/
  156. }
  157. function reverse(){
  158. count--;
  159. count = count==-1?4:count;
  160. for(var i=0;i<len;i++){
  161. img[i].style.display = 'none'; /*利用for循环使除当前count位其他图片隐藏*/
  162. }
  163. img[count].style.display = 'block'; /*显示当前count的值所代表的图片*/
  164. for(var i=0;i<li.length;i++){
  165. li[i].style.backgroundColor = "#fff"; /*原理同上*/
  166. }
  167. li[count].style.backgroundColor = "#f40";
  168. }
  169. div_l.onclick = function(){
  170. reverse(); /*重新设置函数*/
  171. }
  172. </script>
  173. </body>
  174. </html>
  175. var div = document.getElementById('flash');
  176. var img = div.getElementsByTagName('img'); /*选中div下所有的图片*/
  177. var ul = document.getElementsByTagName('ul')[0];
  178. var li = ul.getElementsByTagName('li');
  179. var div_r = document.getElementsByTagName('div')[1];
  180. // var span_r = div_r.getElementsByTagName('span');
  181. var div_l = document.getElementsByTagName('div')[2];
  182. // var sapn_l = div_l.getElementsByTagName('span');
  183. var len = img.length;
  184. var count = 0; /*设置count来显示当前图片的序号*/
  185. function run(){ /*将定时器里的函数提取到外部*/
  186. count++;
  187. count = count==5?0:count; /*当图片加载到最后一张时,使其归零*/
  188. for(var i=0;i<len;i++){
  189. img[i].style.display = 'none'; /*利用for循环使除当前count位其他图片隐藏*/
  190. }
  191. img[count].style.display = 'block'; /*显示当前count的值所代表的图片*/
  192. for(var i=0;i<li.length;i++){
  193. li[i].style.backgroundColor = "#fff"; /*原理同上*/
  194. }
  195. li[count].style.backgroundColor = "#f40";
  196. }
  197. var timer = setInterval(run,1000); /*定义定时器,使图片每隔1s更换一次*/
  198. div.onmouseover = function(){
  199. clearInterval(timer);
  200. }
  201. div.onmouseleave = function(){ /*定义鼠标移出事件,当鼠标移出div区域,轮播继续*/
  202. timer = setInterval(run,1000);
  203. }
  204. for(var i=0;i<len;i++){
  205. li[i].index = i; /*定义index记录当前鼠标在li的位置*/
  206. li[i].onmouseenter = function(){ /*定义鼠标经过事件*/
  207. for(var i=0;i<len;i++){ /*通过for循环将所有图片隐藏,圆点背景设为白色*/
  208. li[i].style.background = '#fff';
  209. img[i].style.display = 'none';
  210. }
  211. this.style.background = '#f40'; /*设置当前所指圆点的背景色*/
  212. img[this.index].style.display = 'block'; /*使圆点对应的图片显示*/
  213. }
  214. }
  215. div_r.onclick = function(){ /*因为span没有设置宽高,直接把事件添加到他的父级*/
  216. run(); /*直接调用现成的run函数*/
  217. }
  218. function reverse(){
  219. count--;
  220. count = count==-1?4:count;
  221. for(var i=0;i<len;i++){
  222. img[i].style.display = 'none'; /*利用for循环使除当前count位其他图片隐藏*/
  223. }
  224. img[count].style.display = 'block'; /*显示当前count的值所代表的图片*/
  225. for(var i=0;i<li.length;i++){
  226. li[i].style.backgroundColor = "#fff"; /*原理同上*/
  227. }
  228. li[count].style.backgroundColor = "#f40";
  229. }
  230. div_l.onclick = function(){
  231. reverse(); /*重新设置函数*/
  232. }

运行效果如下:

70

发表评论

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

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

相关阅读

    相关 原生JS实现简单

    注意 我们用原生JS来做一个简单的无缝轮播图,首先需要准备几张**图片作为材料**,图片的链接需要自己设置,所以这边我的代码中图片链接的位置请大家自己添加图片。 ...