练习6_轮播图.html 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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. <title>Document</title>
  7. <style>
  8. /* css reset */
  9. body,
  10. ul {
  11. margin: 0;
  12. padding: 0;
  13. }
  14. li {
  15. list-style: none;
  16. }
  17. body {
  18. height: 100vh;
  19. background-color: black;
  20. overflow: hidden;
  21. }
  22. .container {
  23. width: 490px;
  24. height: 170px;
  25. border: 5px solid #fff;
  26. margin: 100px auto;
  27. position: relative;
  28. }
  29. .container .slider-img {
  30. position: relative;
  31. }
  32. .container .slider-img img {
  33. width: 490px;
  34. height: 170px;
  35. }
  36. .container .slider-img li {
  37. position: absolute;
  38. top: 0;
  39. left: 0;
  40. display: none;
  41. }
  42. .container .slider-img .active {
  43. display: block;
  44. }
  45. .slider-btn {
  46. position: absolute;
  47. bottom: 10px;
  48. left: 0;
  49. width: 100%;
  50. }
  51. .slider-btn ul li {
  52. color: #fff;
  53. display: inline-block;
  54. width: 20px;
  55. height: 20px;
  56. background-color: #f90;
  57. border-radius: 50%;
  58. text-align: center;
  59. line-height: 20px;
  60. cursor: pointer;
  61. }
  62. .slider-btn .active {
  63. background-color: red;
  64. }
  65. .slider-btn .slider-btn-left {
  66. float: left;
  67. padding-left: 20px;
  68. }
  69. .slider-btn .slider-btn-right {
  70. float: right;
  71. padding-right: 20px;
  72. }
  73. </style>
  74. </head>
  75. <body>
  76. <div class="container">
  77. <div class="slider-img">
  78. <ul>
  79. <li class="img-item active">
  80. <img src="./image/image.png" alt="img">
  81. </li>
  82. <li class="img-item">
  83. <img src="./image/image1.png" alt="img">
  84. </li>
  85. <li class="img-item">
  86. <img src="./image/image2.png" alt="img">
  87. </li>
  88. <li class="img-item">
  89. <img src="./image/image3.png" alt="img">
  90. </li>
  91. <li class="img-item">
  92. <img src="./image/image4.png" alt="img">
  93. </li>
  94. </ul>
  95. </div>
  96. <div class="slider-btn">
  97. <div class="slider-btn-left">
  98. <ul>
  99. <li class="left-btn">&lt;</li>
  100. <li class="right-btn">&gt;</li>
  101. </ul>
  102. </div>
  103. <div class="slider-btn-right">
  104. <ul>
  105. <li class="num-btn active">1</li>
  106. <li class="num-btn">2</li>
  107. <li class="num-btn">3</li>
  108. <li class="num-btn">4</li>
  109. <li class="num-btn">5</li>
  110. </ul>
  111. </div>
  112. </div>
  113. </div>
  114. <script>
  115. // 获取5个数字按钮
  116. var numBtn = document.getElementsByClassName("num-btn");
  117. // 获取5张图片
  118. var imgItem = document.getElementsByClassName("img-item");
  119. // 获取向右按钮
  120. var rightBtn = document.getElementsByClassName("right-btn")[0];
  121. // 获取向左按钮
  122. var leftBtn = document.getElementsByClassName("left-btn")[0];
  123. // 获取轮播区域标签
  124. var oContainer = document.getElementsByClassName("container")[0];
  125. // 标识当前显示的是第几个
  126. var nowIndex = 0;
  127. // 定义存储定时函数的变量
  128. var timer = null;
  129. // 数字按钮功能
  130. // 给5个数字按钮绑定事件
  131. for(var i=0;i<numBtn.length;i++){
  132. // 循环过程当中给每一个按钮添加一个新属性index 用来保存索引i
  133. numBtn[i].index = i;
  134. // 循环给每一个按钮绑定按钮事件
  135. numBtn[i].onmouseenter = function(){
  136. // 调用runFun函数 实现控制
  137. runFun(this.index);
  138. }
  139. }
  140. //向后按钮事件
  141. rightBtn.onclick=function(){
  142. runFun(nowIndex+1);
  143. }
  144. // 向上按钮事件
  145. leftBtn.onclick = function(){
  146. runFun(nowIndex-1)
  147. }
  148. //定时轮播
  149. function playFun(){
  150. timer = setInterval(function(){
  151. runFun(nowIndex+1);
  152. },1000)
  153. }
  154. //自动调用函数开始轮播
  155. playFun();
  156. // 鼠标移入轮播图区域停止播放
  157. oContainer.onmouseenter = function(){
  158. clearInterval(timer);
  159. };
  160. // 鼠标移出轮播图区域继续播放
  161. oContainer.onmouseleave = function(){
  162. // 重新调用播放轮播函数
  163. playFun();
  164. }
  165. // 封装函数实现控制第n个按钮和图片的现实
  166. function runFun(n) {
  167. // 控制向右到达边界的时候更正
  168. if(n==5){
  169. n = 0
  170. }
  171. // 控制向左到达边界的时候更正
  172. if(n<0){
  173. n = 4
  174. }
  175. //循环所有按钮 将选中状态的active类逐个移除
  176. for (var j = 0; j < numBtn.length; j++) {
  177. // 移除按钮的active类
  178. numBtn[j].classList.remove("active");
  179. // 移除图片的选中状态 active类
  180. imgItem[j].classList.remove("active");
  181. }
  182. // 控制第N个按钮 和图片的现实
  183. numBtn[n].classList.add("active");
  184. imgItem[n].classList.add("active");
  185. // 将当前的索引 赋值给nowIdex;
  186. nowIndex = n;
  187. }
  188. //未封装函数前的数字按钮功能
  189. // // 给5个数字按钮绑定事件
  190. // for(var i=0;i<numBtn.length;i++){
  191. // // 循环过程当中给每一个按钮添加一个新属性index 用来保存索引i
  192. // numBtn[i].index = i;
  193. // // 循环给每一个按钮绑定按钮事件
  194. // numBtn[i].onmouseenter = function(){
  195. // // 循环所有按钮 将选中状态的active类逐个移除
  196. // for(var j=0;j<numBtn.length;j++){
  197. // // 移除按钮的active类
  198. // numBtn[j].classList.remove("active");
  199. // // 移除图片的选中状态 active类
  200. // imgItem[j].classList.remove("active");
  201. // }
  202. // // 向当前移入的数字按钮中添加一个新类 activ 变为选中状态
  203. // this.classList.add("active");
  204. // // 向制定索引的图片添加选中状态acitve类
  205. // imgItem[this.index].classList.add("active");
  206. // }
  207. // }
  208. </script>
  209. </body>
  210. </html>