博客列表 >轮播图实例与xhr对象的使用

轮播图实例与xhr对象的使用

天宁
天宁原创
2022年04月12日 19:30:22379浏览

轮播图实例

代码

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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>轮播图</title>
  8. <style>
  9. /* ! 3. 轮播图 */
  10. .slider {
  11. max-width: 750px;
  12. min-width: 320px;
  13. margin: auto;
  14. padding: 0 10px;
  15. }
  16. .slider .imgs {
  17. /* 图片容器必须要有高度,否则下面图片不能正常显示 */
  18. height: 150px;
  19. position: relative;
  20. }
  21. .slider .imgs img {
  22. /* 图片完全充满父级空间显示 */
  23. height: 100%;
  24. width: 100%;
  25. /* 图片带有圆角 */
  26. border-radius: 10px;
  27. /* 默认图片全部隐藏,只有有active的图片才显示 */
  28. display: none;
  29. }
  30. .slider .imgs img:hover {
  31. cursor: pointer;
  32. }
  33. /* 默认显示第一张 */
  34. .slider .imgs img.active {
  35. display: block;
  36. }
  37. /* 轮播图按钮组 */
  38. .slider .btns {
  39. /* 按钮水平一排显示,用flex,且水平居中 */
  40. display: flex;
  41. place-content: center;
  42. }
  43. .slider .btns span {
  44. /* 按钮宽高相同,确定显示成一个正圆 */
  45. width: 8px;
  46. height: 8px;
  47. /* 加上红色背景和数字是为了布局时可以看到,一会更去掉 */
  48. background-color: rgba(255, 255, 255, 0.4);
  49. /* 50%可确保显示为正圆 */
  50. border-radius: 50%;
  51. /* 按钮上外边距负值,可将它上移,可移动到图片中下方 */
  52. margin: -12px 3px 5px;
  53. z-index: 99;
  54. }
  55. .slider .btns span.active {
  56. background-color: #fff;
  57. }
  58. /* 导航切换按钮 */
  59. .slider .imgs > span:first-of-type {
  60. width: 20px;
  61. height: 30px;
  62. border-radius: 50px 0 0 50px;
  63. background: rgba(0, 0, 0, 0.1);
  64. color: #f0f8ff;
  65. position: absolute;
  66. top: 60px;
  67. text-align: center;
  68. line-height: 25px;
  69. }
  70. .slider .imgs > span:last-of-type {
  71. width: 20px;
  72. height: 30px;
  73. border-radius: 0 50px 50px 0;
  74. background: rgba(0, 0, 0, 0.1);
  75. color: #f0f8ff;
  76. position: absolute;
  77. top: 60px;
  78. text-align: center;
  79. line-height: 25px;
  80. right: 0;
  81. }
  82. .slider .imgs > span:hover {
  83. background-color: red;
  84. cursor: pointer;
  85. }
  86. </style>
  87. </head>
  88. <body>
  89. <div class="slider">
  90. <!--
  91. 图片容器
  92. 1. 图片组
  93. 2. 按钮组
  94. 注: 按钮数组与图片数量是一样的
  95. -->
  96. <div class="imgs">
  97. <!-- 轮播图默认从第一张开始显示 -->
  98. <span>&lt;</span>
  99. <img src="./images/banner1.jpg" alt="" data-index="1" class="active" />
  100. <img src="./images/banner2.jpg" alt="" data-index="2" />
  101. <img src="./images/banner3.png" alt="" data-index="3" />
  102. <span>&gt;</span>
  103. </div>
  104. <!-- 切换按钮数量与图片数量必须一致 -->
  105. <div class="btns">
  106. <span data-index="1" class="active" onclick="setActive()"></span>
  107. <span data-index="2" onclick="setActive()"></span>
  108. <span data-index="3" onclick="setActive()"></span>
  109. </div>
  110. </div>
  111. <script>
  112. // 1. 获取全部图片和按钮
  113. const imgs = document.querySelectorAll('.slider .imgs img');
  114. const btns = document.querySelectorAll('.slider .btns span');
  115. // 2. 设置激活状态
  116. function setActive() {
  117. // 1. 清空图片和所有按钮的激活状态
  118. imgs.forEach(img => img.classList.remove('active'));
  119. btns.forEach(btn => btn.classList.remove('active'));
  120. // 2. 根据按钮的索引data-index来确定应该将哪一张图片显示出来class=active
  121. event.target.classList.add('active');
  122. imgs.forEach(img => {
  123. if (img.dataset.index === event.target.dataset.index) {
  124. img.classList.add('active');
  125. }
  126. });
  127. }
  128. // 3. 自动播放
  129. // [1,2,3]
  130. // [2,3,1]
  131. // [3,1,2]
  132. // [1,2,3]
  133. // 首尾相连,实现循环播放
  134. // 自动点击: 事件派发器
  135. // 间歇式触发,每隔一段固定时间会自动触发一次事件
  136. // setInterval: 除了回调和时间外,还可传入第三个参数,做为回调的参数
  137. let carousel = setInterval(
  138. arr => {
  139. // 1. 头部删除
  140. let i = arr.shift();
  141. // 2. 尾部追加
  142. arr.push(i);
  143. // 3. 事件派发: 模拟用户点击
  144. btns[i].dispatchEvent(new Event('click'));
  145. },
  146. 2000,
  147. Object.keys(btns)
  148. );
  149. // console.log(Object.keys(btns));
  150. // console.log(Object.keys(imgs));
  151. //停止自动播放;
  152. document.querySelector('.slider .imgs').addEventListener('mouseover', () => {
  153. clearInterval(carousel);
  154. console.log('停止自动播放');
  155. });
  156. //开始自动播放
  157. document.querySelector('.slider .imgs').addEventListener('mouseout', () => {
  158. carousel = setInterval(
  159. arr => {
  160. let i = arr.shift();
  161. arr.push(i);
  162. btns[i].dispatchEvent(new Event('click'));
  163. },
  164. 2000,
  165. Object.keys(btns)
  166. );
  167. console.log('开始自动播放');
  168. });
  169. function name(params) {}
  170. //向左滚动
  171. let arrs = Object.keys(imgs);
  172. console.log(arrs);
  173. document.querySelector('.slider .imgs > span:first-of-type').addEventListener('click', () => {
  174. //尾部删除,头部添加
  175. let i = arrs.pop();
  176. arrs.unshift(i);
  177. console.log('当前索引', i);
  178. console.log(arrs);
  179. imgs.forEach((item, index) => {
  180. item.classList.remove('active');
  181. btns[index].classList.remove('active');
  182. });
  183. console.log('要添加的索引', arrs[0]);
  184. imgs[arrs[0]].classList.add('active');
  185. btns[arrs[0]].classList.add('active');
  186. });
  187. //向右滚动
  188. document.querySelector('.slider .imgs > span:last-of-type').addEventListener('click', () => {
  189. // 头部删除,尾部添加
  190. let i = arrs.shift();
  191. arrs.push(i);
  192. console.log('当前索引', i);
  193. console.log(arrs);
  194. imgs.forEach((item, index) => {
  195. item.classList.remove('active');
  196. btns[index].classList.remove('active');
  197. });
  198. console.log('要添加的索引', arrs[0]);
  199. imgs[arrs[0]].classList.add('active');
  200. btns[arrs[0]].classList.add('active');
  201. });
  202. // 作业1: 实现鼠标悬停时自动停止播放, 离开时又自动播放
  203. // 作业2[可选]: 给这个轮播图加上翻页按按钮,实现向前和向后翻页播放
  204. </script>
  205. </body>
  206. </html>

XHR对象的使用

  1. // 1. 传统 XHR
  2. /**
  3. * 1. 创建对象: new XMLHttpRequest();
  4. * 2. 响应类型: xhr.responseType = "json";
  5. * 3. 配置参数: xhr.open("GET", url, true);
  6. * 4. 请求回调: xhr.onload = () => console.log(xhr.response);
  7. * 5. 失败回调: xhr.onerror = () => console.log("Error");
  8. * 6. 发起请求: xhr.send(null);
  9. *
  10. * xhr 至少监听2个事件: load,error, 调用2个函数: open,send
  11. * post请求,需要设置一下请求头与请求的数据,其它与get请求完全相同
  12. */
  13. function getUser1(btn) {
  14. // 1. 创建xhr对象
  15. const xhr = new XMLHttpRequest;
  16. // 2. 响应类型
  17. xhr.responseType = 'json'
  18. // 3. 配置参数
  19. let url = 'http://xhr411.com/users.php?id=2'
  20. xhr.open('GET', url);
  21. // 4. 请求成功的回调
  22. xhr.onload = () => {
  23. // 返回的值
  24. console.log(xhr.response);
  25. //返回的值可以进行操作以及渲染到界面上
  26. }
  27. // 5. 请求失败的回调
  28. xhr.onerror = () => {
  29. // 返回的值
  30. console.log('请求错误');
  31. }
  32. // 6. 发起xhr请求
  33. xhr.send(null)
  34. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议