1.轮播图实例

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

轮播图

2.xhr对象的使用

  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>Ajax-XHR</title>
  8. </head>
  9. <body>
  10. <button onclick="getUser(this)">用户信息: xhr</button>
  11. <script>
  12. function getUser(btn) {
  13. // 1. 创建xhr对象
  14. const xhr = new XMLHttpRequest;
  15. // 2. 响应类型
  16. xhr.responseType = 'json'
  17. // 3. 配置参数
  18. let url = 'http://127.0.0.21/users.php?id=3'
  19. xhr.open('GET', url);
  20. // 4. 请求成功的回调
  21. xhr.onload = () => {
  22. // 返回的值
  23. console.log(xhr.response);
  24. }
  25. // 5. 请求失败的回调
  26. xhr.onerror = () => {
  27. // 返回的值
  28. console.log('请求错误');
  29. }
  30. // 6. 发起xhr请求
  31. xhr.send(null)
  32. }
  33. </script>
  34. </body>
  35. </html>

更多相关文章

  1. android背景选择器selector用法、自定义Button按钮样式.........
  2. 探讨android图片资源的抖动处理和格式转换
  3. Android的DialogFragment的基本使用方法
  4. 为什么比起 Metro 我更喜欢 Holo
  5. (4.1.12)Android高效加载大图、多图解决方案,有效避免程序OOM
  6. 2010.12.16——— android listView 显示图片 内存溢出问题
  7. Android(安卓)截取屏幕图片并保存
  8. 在Android中自定义IOS风格的按钮
  9. Android加载图片时OOM异常解决办法——Bitmap Options

随机推荐

  1. Android 图片加载图片_OOM异常解决
  2. Android corners 圆角属性各个版本之间兼
  3. 系出名门Android(8) - 控件(View)之TextS
  4. Android出现Could not find ***.apk!错误
  5. android EditText中的inputType .
  6. android 环境搭建helloworld
  7. android移动数据上网的开关的实现
  8. 腾讯微博客户端开发视频--若水(第三集、第
  9. Android SDK 快速安装方法
  10. android获取APK签名信息及MD5指纹