1_轮播图.html 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <link rel="stylesheet" href="./icon/iconfont.css">
  9. <style>
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. }
  14. ul {
  15. list-style: none;
  16. }
  17. #container {
  18. width: 590px;
  19. height: 470px;
  20. margin: 100px auto;
  21. position: relative;
  22. }
  23. .selected {
  24. display: none;
  25. }
  26. .choice {
  27. display: block;
  28. }
  29. #btns {
  30. position: absolute;
  31. right: 10px;
  32. bottom: 10px;
  33. }
  34. #btns li {
  35. width: 20px;
  36. height: 20px;
  37. border-radius: 10px;
  38. background: aqua;
  39. text-align: center;
  40. line-height: 20px;
  41. color: white;
  42. float: left;
  43. margin-right: 5px;
  44. }
  45. #btns .select {
  46. background: red;
  47. }
  48. #next,
  49. #prev {
  50. width: 40px;
  51. height: 40px;
  52. position: absolute;
  53. top: 215px;
  54. opacity: 0.4;
  55. display: none;
  56. }
  57. #next {
  58. right: 0;
  59. }
  60. #next span {
  61. font-size: 40px;
  62. }
  63. #prev span {
  64. font-size: 40px;
  65. }
  66. </style>
  67. </head>
  68. <body>
  69. <div id="container">
  70. <div id="img-box">
  71. <img class="selected choice" src="image/1.jpg" alt="">
  72. <img class="selected" src="image/2.jpg" alt="">
  73. <img class="selected" src="image/3.jpg" alt="">
  74. <img class="selected" src="image/4.jpg" alt="">
  75. <img class="selected" src="image/5.jpg" alt="">
  76. </div>
  77. <ul id="btns">
  78. <li class="select">1</li>
  79. <li>2</li>
  80. <li>3</li>
  81. <li>4</li>
  82. <li>5</li>
  83. </ul>
  84. <div id="next">
  85. <span class="iconfont icon-next"></span>
  86. </div>
  87. <div id="prev">
  88. <span class="iconfont icon-prev"></span>
  89. </div>
  90. </div>
  91. <script>
  92. var btns = document.getElementsByTagName('li') //类数组
  93. var imgs = document.getElementsByClassName('selected')
  94. var next = document.getElementById('next')
  95. var prev = document.getElementById('prev')
  96. var container = document.getElementById('container')
  97. //定义全局索引变量
  98. iNow = 0
  99. //想要给类数组绑定点击事件 我们需要利用循环
  100. for (var i = 0; i < btns.length; i++) {
  101. //创建一个属性 去把索引的值提取出来
  102. //局部变量
  103. btns[i].index = i
  104. //btns[0].index = 0
  105. //btns[1].index = 1
  106. //给数组里面每一项都绑定点击事件
  107. btns[i].onclick = function () {
  108. // 一上来清除所有的样式 恢复到没有设置的时候
  109. for (var k = 0; k < btns.length; k++) {
  110. //按钮恢复
  111. btns[k].className = ''
  112. imgs[k].className = 'selected'
  113. }
  114. //谁的点击事件就是谁
  115. // btns[0,1,2,3,4,5].className = 'select'
  116. //this = btns[点击的那个索引]
  117. this.className = 'select'
  118. //从上面换算一下 this.index = btns[点击的那个索引].index
  119. //例子: 点击索引为2的按钮 this.index = btns[2].index ---> btns[2].index = 2
  120. imgs[this.index].className = 'selected choice'
  121. //赋值为当前的索引
  122. iNow = this.index
  123. }
  124. }
  125. //下一个点击事件
  126. next.onclick = function () {
  127. console.log(iNow)
  128. //当前的索引+1 ----->下一个
  129. iNow++;
  130. //当我们图片 索引+= 5 发现数组里面没有这么多个 变为空白 提醒报错
  131. //需要判断 如果 超出了 索引的最大值 变为索引为0 的图片
  132. if (iNow > btns.length - 1) {
  133. iNow = 0
  134. }
  135. // for (var k = 0; k < btns.length; k++) {
  136. // btns[k].className = ''
  137. // imgs[k].className = 'selected'
  138. // }
  139. // btns[iNow].className = 'select'
  140. // imgs[iNow].className = 'selected choice'
  141. //把方法提取出去 避免代码重复
  142. myFun(iNow)
  143. }
  144. //上一个点击事件
  145. prev.onclick = function () {
  146. iNow--;
  147. if (iNow < 0) {
  148. iNow = btns.length - 1
  149. }
  150. myFun(iNow)
  151. }
  152. //鼠标划入事件
  153. container.onmousemove = function () {
  154. next.style.display = 'block'
  155. prev.style.display = 'block'
  156. clearInterval(timer)
  157. }
  158. //鼠标划出事件
  159. container.onmouseout = function () {
  160. next.style.display = 'none'
  161. prev.style.display = 'none'
  162. //划出的时候 需要重新设定定时器
  163. //不要var var就相当于在这个函数里面 又创建了一个 定时器 同名 会同时触发
  164. //重新唤醒之前的定时器就可以
  165. timer = setInterval(function () {
  166. next.onclick()
  167. }, 1000)
  168. }
  169. //定时器
  170. //如果在这个页面里面 想要实现 定时下一个 就相当于 触发了 下一个的事件
  171. var timer = setInterval(function () {
  172. next.onclick()
  173. }, 1000)
  174. var myFun = function (xx) {
  175. for (var k = 0; k < btns.length; k++) {
  176. btns[k].className = ''
  177. imgs[k].className = 'selected'
  178. }
  179. //变得只是传进来的索引
  180. btns[xx].className = 'select'
  181. imgs[xx].className = 'selected choice'
  182. }
  183. </script>
  184. </body>
  185. </html>