博主信息
博文 8
粉丝 1
评论 0
访问量 7555
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
懒加载作业
不露声色
原创
805人浏览过

实现懒加载(重在掌握原理)

正常我们看到图片显示看到一个替代图,鼠标滚动经过时,会显示真正的图片,就相当于真正的图片等到滚动到该区域等了一会才真正加载出来

原理:

那如果当前图片距离顶部的高度小于当前视口加上滚动距离的高度的时候,那么这个图片就显示出来如图

那么我们需要知道几个参数并且需要结合定时器

1.当前图片距离顶部的高度 offsetTop
2.滚动距离 document.documentElement.scrollTop
3.视口高度 document.documentElement.clientHeight;

  1. setTimeout();

奉上代码
html部分

  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. .container {
  10. width: 500px;
  11. display: grid;
  12. gap: 10px;
  13. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  14. }
  15. .container img {
  16. width: 100%;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div class="container">
  22. <img src="images2/temp.jpg" alt="" data-src="images2/img-1.jpg" />
  23. <img src="images2/temp.jpg" alt="" data-src="images2/img-2.jpg" />
  24. <img src="images2/temp.jpg" alt="" data-src="images2/img-3.jpg" />
  25. <img src="images2/temp.jpg" alt="" data-src="images2/img-4.jpg" />
  26. <img src="images2/temp.jpg" alt="" data-src="images2/img-5.jpg" />
  27. <img src="images2/temp.jpg" alt="" data-src="images2/img-6.jpg" />
  28. <img src="images2/temp.jpg" alt="" data-src="images2/img-7.jpg" />
  29. <img src="images2/temp.jpg" alt="" data-src="images2/img-8.jpg" />
  30. <img src="images2/temp.jpg" alt="" data-src="images2/img-9.jpg" />
  31. <img src="images2/temp.jpg" alt="" data-src="images2/img-10.jpg" />
  32. <img src="images2/temp.jpg" alt="" data-src="images2/img-11.jpg" />
  33. <img src="images2/temp.jpg" alt="" data-src="images2/img-12.jpg" />
  34. <img src="images2/temp.jpg" alt="" data-src="images2/img-13.jpg" />
  35. <img src="images2/temp.jpg" alt="" data-src="images2/img-14.jpg" />
  36. <img src="images2/temp.jpg" alt="" data-src="images2/img-15.jpg" />
  37. <img src="images2/temp.jpg" alt="" data-src="images2/img-16.jpg" />
  38. <img src="images2/temp.jpg" alt="" data-src="images2/img-17.jpg" />
  39. <img src="images2/temp.jpg" alt="" data-src="images2/img-18.jpg" />
  40. <img src="images2/temp.jpg" alt="" data-src="images2/img-19.jpg" />
  41. <img src="images2/temp.jpg" alt="" data-src="images2/img-20.jpg" />
  42. <img src="images2/temp.jpg" alt="" data-src="images2/img-21.jpg" />
  43. <img src="images2/temp.jpg" alt="" data-src="images2/img-22.jpg" />
  44. <img src="images2/temp.jpg" alt="" data-src="images2/img-23.jpg" />
  45. <img src="images2/temp.jpg" alt="" data-src="images2/img-24.jpg" />
  46. <img src="images2/temp.jpg" alt="" data-src="images2/img-25.jpg" />
  47. <img src="images2/temp.jpg" alt="" data-src="images2/img-26.jpg" />
  48. <img src="images2/temp.jpg" alt="" data-src="images2/img-27.jpg" />
  49. <img src="images2/temp.jpg" alt="" data-src="images2/img-28.jpg" />
  50. <img src="images2/temp.jpg" alt="" data-src="images2/img-29.jpg" />
  51. <img src="images2/temp.jpg" alt="" data-src="images2/img-30.jpg" />
  52. <img src="images2/temp.jpg" alt="" data-src="images2/img-31.jpg" />
  53. <img src="images2/temp.jpg" alt="" data-src="images2/img-32.jpg" />
  54. <img src="images2/temp.jpg" alt="" data-src="images2/img-33.jpg" />
  55. <img src="images2/temp.jpg" alt="" data-src="images2/img-34.jpg" />
  56. <img src="images2/temp.jpg" alt="" data-src="images2/img-35.jpg" />
  57. <img src="images2/temp.jpg" alt="" data-src="images2/img-36.jpg" />
  58. <img src="images2/temp.jpg" alt="" data-src="images2/img-37.jpg" />
  59. <img src="images2/temp.jpg" alt="" data-src="images2/img-38.jpg" />
  60. <img src="images2/temp.jpg" alt="" data-src="images2/img-39.jpg" />
  61. <img src="images2/temp.jpg" alt="" data-src="images2/img-40.jpg" />
  62. <img src="images2/temp.jpg" alt="" data-src="images2/img-41.jpg" />
  63. <img src="images2/temp.jpg" alt="" data-src="images2/img-42.jpg" />
  64. <img src="images2/temp.jpg" alt="" data-src="images2/img-43.jpg" />
  65. <img src="images2/temp.jpg" alt="" data-src="images2/img-44.jpg" />
  66. <img src="images2/temp.jpg" alt="" data-src="images2/img-45.jpg" />
  67. <img src="images2/temp.jpg" alt="" data-src="images2/img-46.jpg" />
  68. <img src="images2/temp.jpg" alt="" data-src="images2/img-47.jpg" />
  69. <img src="images2/temp.jpg" alt="" data-src="images2/img-48.jpg" />
  70. <img src="images2/temp.jpg" alt="" data-src="images2/img-49.jpg" />
  71. <img src="images2/temp.jpg" alt="" data-src="images2/img-50.jpg" />
  72. <img src="images2/temp.jpg" alt="" data-src="images2/img-51.jpg" />
  73. <img src="images2/temp.jpg" alt="" data-src="images2/img-52.jpg" />
  74. <img src="images2/temp.jpg" alt="" data-src="images2/img-53.jpg" />
  75. <img src="images2/temp.jpg" alt="" data-src="images2/img-54.jpg" />
  76. <img src="images2/temp.jpg" alt="" data-src="images2/img-55.jpg" />
  77. <img src="images2/temp.jpg" alt="" data-src="images2/img-56.jpg" />
  78. <img src="images2/temp.jpg" alt="" data-src="images2/img-57.jpg" />
  79. <img src="images2/temp.jpg" alt="" data-src="images2/img-58.jpg" />
  80. <img src="images2/temp.jpg" alt="" data-src="images2/img-59.jpg" />
  81. <img src="images2/temp.jpg" alt="" data-src="images2/img-60.jpg" />
  82. <img src="images2/temp.jpg" alt="" data-src="images2/img-61.jpg" />
  83. <img src="images2/temp.jpg" alt="" data-src="images2/img-62.jpg" />
  84. <img src="images2/temp.jpg" alt="" data-src="images2/img-63.jpg" />
  85. <img src="images2/temp.jpg" alt="" data-src="images2/img-64.jpg" />
  86. <img src="images2/temp.jpg" alt="" data-src="images2/img-65.jpg" />
  87. <img src="images2/temp.jpg" alt="" data-src="images2/img-66.jpg" />
  88. <img src="images2/temp.jpg" alt="" data-src="images2/img-67.jpg" />
  89. <img src="images2/temp.jpg" alt="" data-src="images2/img-68.jpg" />
  90. <img src="images2/temp.jpg" alt="" data-src="images2/img-69.jpg" />
  91. <img src="images2/temp.jpg" alt="" data-src="images2/img-70.jpg" />
  92. </div>
  93. </body>
  94. </html>

js部分

  1. const imgs = document.querySelectorAll('.container img');
  2. // const imgs = document.images;
  3. console.log(imgs);
  4. //视口高度
  5. const clientHeight = document.documentElement.clientHeight;
  6. // 监听滚动事件
  7. window.addEventListener("scroll", lazyload);
  8. // 当加载好页面的时候,不能都显示替代的图片,所以可以调用一次,加载几张
  9. window.onload = function () {
  10. lazyload();
  11. }
  12. function lazyload() {
  13. imgs.forEach((img) => {
  14. // 那如果当前图片距离顶部的高度小于当前视口加上滚动距离的高度的时候,
  15. // 那么这个图片就显示出来
  16. // 当前图片距离顶部的高度 offsetTop
  17. // 滚动距离 scrollTop
  18. // 视口高度 document.documentElement.clientHeight;
  19. // 也就是说
  20. if (img.offsetTop < clientHeight + document.documentElement.scrollTop) {
  21. setTimeout(function () {
  22. img.src = img.dataset.src;
  23. }, 500);
  24. }
  25. });
  26. }

实现效果如下:

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学