Blogger Information
Blog 70
fans 4
comment 5
visits 104890
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
JavaScript:1.图片懒加载演示;2.轮播图为翻页按钮添加功能;
JiaJieChen
Original
6332 people have browsed it

JavaScript:1.懒加载演示;2.轮播图为翻页按钮添加功能;

一.图片懒加载演示

关于高度 代码
视口高度 clientHeight
滚动高度 scrollTop
距离父级高度 offsetTop

  1. <script>
  2. //首先拿到所有的图片
  3. const img = document.querySelectorAll(".box img");
  4. //然后拿到视口高度
  5. const clientHeight = document.documentElement.clientHeight;
  6. //创建懒加载函数回调
  7. function layzyload() {
  8. //创建滚动距离变量
  9. let scrollTop = document.documentElement.scrollTop;
  10. //用forEach遍历img
  11. img.forEach((img) => {
  12. //用if语句来判断这张图片的顶部距离它的父级的高度,是否小于视口高度与滚动距离之和
  13. //offsetTop 图片距离父级的高度
  14. if (img.offsetTop < clientHeight + scrollTop) {
  15. //延迟函数 setTimeout
  16. setTimeout(() => {
  17. //延迟0.5秒替换显示图片的路径
  18. img.src = img.dataset.src;
  19. }, 500);
  20. }
  21. });
  22. }
  23. //创建监听滚动事件
  24. // scroll: 滚动事件,
  25. window.addEventListener("scroll", layzyload);
  26. //load:当页面加载完成后立即显示第一屏
  27. window.addEventListener("load", layzyload);
  28. </script>

二.轮播图为翻页按钮添加功能

代码块

  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>轮播图</title>
  8. <style>
  9. @import url(lbt.css);
  10. </style>
  11. </head>
  12. <body>
  13. <div class="box">
  14. <!-- 图片组 -->
  15. <div class="imgs">
  16. <a href=""
  17. ><img src="banner/banner1.jpg" alt="" data-index="1" class="active"
  18. /></a>
  19. <a href=""><img src="banner/banner2.jpg" alt="" data-index="2" /></a>
  20. <a href=""><img src="banner/banner3.jpg" alt="" data-index="3" /></a>
  21. <a href=""><img src="banner/banner4.jpg" alt="" data-index="4" /></a>
  22. </div>
  23. <!-- 图片下方小按钮 -->
  24. <div class="btns"></div>
  25. <!-- 翻页按钮 -->
  26. <div class="skip active">
  27. <a href="" class="prev">&lt;</a>
  28. <a href="" class="next">&gt;</a>
  29. </div>
  30. <script>
  31. //拿到所有图片
  32. const imgs = document.querySelectorAll(".box > .imgs img");
  33. //拿到小按钮组
  34. const btns = document.querySelector(".box > .btns");
  35. //动态化创建小按钮组,轮播图片有多少张就有多少个按钮
  36. function zdButton(ele, imgLength) {
  37. //优化编程:按钮创造之后放到中介里面去,然后全部完成后放到页面中
  38. //createDocumentFragment 方法 建立复用文档片段
  39. const frag = document.createDocumentFragment();
  40. for (let i = 0; i < imgLength; i++) {
  41. //创建a链接
  42. const a = document.createElement("a");
  43. //设置a链接地址为空
  44. a.href = "#";
  45. //设置a链接自定义属性与图片自定义属性相符
  46. a.dataset.index = i + 1;
  47. //判断a链接激活样式
  48. if (i === 0) a.classList.add("active");
  49. // 将a链接传入frag复用文档片段中
  50. frag.append(a);
  51. }
  52. //将复用文档片段传入ele行参中
  53. ele.append(frag);
  54. }
  55. //调用函数传入按钮位置实参
  56. zdButton(btns, imgs.length);
  57. //为刚刚生成的小按钮添加点击事件
  58. //获取到全部的小按钮赋值给常量btnsj
  59. const btnsj = document.querySelectorAll(".box > .btns > *");
  60. //建立两个公共函数
  61. //获取激活的元素
  62. function getActiveEle(eles) {
  63. //contains 该方法是判断字符串中是否有子字符串,如果有为true,如果没有为false
  64. let activeEles = [...eles].filter((ele) =>
  65. ele.classList.contains("active")
  66. );
  67. //返回这个元素给函数
  68. return activeEles[0];
  69. }
  70. // 设置激活的元素,根据按钮索引更新正在显示的图片
  71. // 参数就是当前正在点击的按钮的索引
  72. function setActiveEle(btnIndex) {
  73. // 先将之前的激活的样式去掉
  74. [imgs, btnsj].forEach((arr) => {
  75. getActiveEle(arr).classList.remove("active");
  76. // 再根据当前的的自定义索引来重新设置应该激活的按钮和图片
  77. // 判断当前行参和实参索引是否相等如果相等重新传入active
  78. arr.forEach((item) => {
  79. if (item.dataset.index === btnIndex) {
  80. item.classList.add("active");
  81. }
  82. });
  83. });
  84. }
  85. // 为按钮添加事件监听器
  86. btnsj.forEach((btn) =>
  87. btn.addEventListener("click", (ev) =>
  88. setActiveEle(ev.target.dataset.index)
  89. )
  90. );
  91. // 当前图片索引: 公共函数 getActiveEle()
  92. let currentImgIndex = getActiveEle(imgs).dataset.index;
  93. //轮播图翻页按钮功能设置
  94. //拿到左右的翻页按钮
  95. const skipleft = document.querySelector(".box > .skip >.prev");
  96. const skipright = document.querySelector(".box > .skip >.next");
  97. //拿到翻页按钮
  98. const skip = document.querySelector(".box > .skip");
  99. //首先去除左右两边翻页按钮的默认样式:preventDefault 禁用默认样式
  100. skip.onclick = (ev) => {
  101. ev.preventDefault();
  102. };
  103. //设置右边按钮点击一下data-index值就+1
  104. let i = 1;
  105. skipright.onclick = (ev) => {
  106. if (i <= imgs.length) {
  107. // console.log("1" + skipright.target);
  108. skipright.dataset.index = i++;
  109. } else {
  110. i = 1;
  111. }
  112. [...skipright.children].forEach((item) =>
  113. item.classList.remove("active")
  114. );
  115. ev.target.classList.add("active");
  116. imgs.forEach((item) => item.classList.remove("active"));
  117. [...imgs]
  118. .filter((item) => item.dataset.index === ev.target.dataset.index)
  119. .pop()
  120. .classList.add("active");
  121. };
  122. //设置左边边按钮点击一下data-index值就-1
  123. let b = 4;
  124. skipleft.onclick = (ev) => {
  125. if (b <= imgs.length && b > 0) {
  126. // console.log("1" + skipright.target);
  127. skipleft.dataset.index = b--;
  128. } else {
  129. b = 4;
  130. }
  131. [...skipleft.children].forEach((item) =>
  132. item.classList.remove("active")
  133. );
  134. ev.target.classList.add("active");
  135. imgs.forEach((item) => item.classList.remove("active"));
  136. [...imgs]
  137. .filter((item) => item.dataset.index === ev.target.dataset.index)
  138. .pop()
  139. .classList.add("active");
  140. };
  141. // 定时器
  142. let timer = null;
  143. // 创建自定义事件对象: 点击类型
  144. let clickEvent = new Event("click");
  145. // 为轮播图容器绑定鼠标事件
  146. const container = document.querySelector(".box");
  147. // 鼠标移入时,停止自动播放
  148. container.addEventListener("mouseover", stopPlay, false);
  149. // 鼠标移出时,自动播放
  150. container.addEventListener("mouseout", autoPlay, false);
  151. // 自动播放
  152. function autoPlay(ev) {
  153. // 创建一个每隔1秒自动触发的"间歇式定时器"
  154. timer = setInterval(() => {
  155. // 将自定义点击事件任意派发给"前进或后退"中的一个按钮即可,本例自动点击前进按钮
  156. skip.querySelector(".next").dispatchEvent(clickEvent, skipright);
  157. }, 1000);
  158. }
  159. // 页面加载完成开始播放
  160. window.onload = () => {
  161. autoPlay(1000);
  162. };
  163. // 自动停止播放
  164. function stopPlay(ev) {
  165. // 清除间隙定时器,结束自动播放
  166. clearInterval(timer);
  167. }
  168. </script>
  169. </div>
  170. </body>
  171. </html>
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:写得非常棒
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post