图片懒加载

青旅半醒 2022-11-16 13:41 485阅读 0赞

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdsZjUyMQ_size_16_color_FFFFFF_t_70

如果:offsetTop-scrollTop<clientHeight,则图片进入了可视区内,则被请求;

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>图片懒加载</title>
  8. <style>
  9. img {
  10. display: block;
  11. width: 100%;
  12. height: 300px;
  13. margin-bottom: 20px;
  14. }
  15. </style>
  16. </head>
  17. <body>
  18. <img data-src="./images/1.jpg" alt="">
  19. <img data-src="./images/2.jpg" alt="">
  20. <img data-src="./images/3.jpg" alt="">
  21. <img data-src="./images/4.jpg" alt="">
  22. <img data-src="./images/5.jpg" alt="">
  23. <img data-src="./images/6.jpg" alt="">
  24. <img data-src="./images/7.jpg" alt="">
  25. <img data-src="./images/8.jpg" alt="">
  26. <img data-src="./images/9.jpg" alt="">
  27. <img data-src="./images/10.jpg" alt="">
  28. <img data-src="./images/1.jpg" alt="">
  29. <img data-src="./images/2.jpg" alt="">
  30. </body>
  31. <script>
  32. var imgs = document.querySelectorAll('img');
  33. //offsetTop是元素与offsetParent的距离,循环获取直到页面顶部
  34. function getTop(e) {
  35. var T = e.offsetTop;
  36. while(e = e.offsetParent) {
  37. T += e.offsetTop;
  38. }
  39. return T;
  40. }
  41. function lazyLoad() {
  42. var H = document.documentElement.clientHeight;//获取可视区域高度
  43. var S = document.documentElement.scrollTop || document.body.scrollTop;
  44. for (var i = 0; i < imgs.length; i++) {
  45. if (H + S > getTop(imgs[i])) { // clientHeight + scrollTop > offsetTop
  46. imgs[i].src = imgs[i].getAttribute('data-src');
  47. }
  48. }
  49. }
  50. function throttling(callback, delay = 1000) {
  51. let timer = null
  52. return function () {
  53. if (timer) return
  54. timer = setTimeout(() => {
  55. callback()
  56. timer = null
  57. }, delay)
  58. }
  59. }
  60. window.onload = window.onscroll = throttling(lazyLoad);
  61. </script>
  62. </html>

发表评论

表情:
评论列表 (有 0 条评论,485人围观)

还没有评论,来说两句吧...

相关阅读

    相关 图片

    在一个项目中,如果同时加载的图片太多的话,会导致页面卡顿,这个时候就会用到懒加载。懒加载的实现原理是监听浏览器的滚动条事件,先加载出前面几张图片,然后当滚动条滚动的时候再依次加

    相关 图片

    懒加载的意义[(在线demo预览)][demo] 尽管很多公司的网页都有一些限制,比如页面的最大的图片大小不得大于50k,也有很多图片优化工具fis3、gulp等等,但是

    相关 图片

    在实际的项目开发中,我们通常会遇见这样的场景:一个页面有很多图片,而首屏出现的图片大概就一两张,那么我们还要一次性把所有图片都加载出来吗?显然这是愚蠢的,不仅影响页面渲染速度,