原生js实现懒加载
发布日期:2021-05-10 03:43:41 浏览次数:24 分类:精选文章

本文共 1819 字,大约阅读时间需要 6 分钟。

图片懒加载是一种优化页面加载速度的技术,通过延迟加载图片来减少初始页面加载时间,提升用户体验。以下是实现懒加载的关键原理及技术实现方法。

懒加载的核心原理

懒加载的核心思想是通过设置图片的src为空,等到页面已加载到某个位置时,再动态加载所需的图片。具体实现方式如下:

  • 自定义属性存储图片地址:将图片的真实地址存储在自定义属性中,例如 data-srcdate-src。这样可以避免在页面初次加载时将所有图片加载到内存中。
  • 初始加载显示占位图:在页面初次加载时,展示一张占位图(可用一张透明的图片或简单的HTML元素代替),直到动态加载所需图片。
  • 实现懒加载必备的技术知识

    在实现懒加载前,需要掌握以下关键知识点:

  • 自定义属性的获取方法: 使用 getAttribute 方法可以获取自定义属性。例如:

    element.getAttribute('data-src')

    这样可以轻松获取存储在自定义属性中的图片地址。

  • 相关的内置方法和属性

    • clientHeight:表示当前页面的 viewport 高度。
    • scrollHeight:表示页面总高度。
    • offsetTop:表示元素相对于 viewport 的垂直位置。
    • scrollTop:表示页面当前滚动的位置。
  • 图片加载的触发条件: 当页面滚动到某个位置时,检查是否需要加载下一张图片。通常的触发条件是:当前图片的 offsetTop 小于等于 viewport 的高度加上当前滚动位置。

  • 实现懒加载的具体步骤

  • 获取所有图片元素: 首先,获取页面中所有的图片元素。可以使用 getElementsByTagName 方法。

    const imgs = document.getElementsByTagName('img');
  • 初始化变量

    • n:记录当前已经加载的图片数量。
    • seeHeight:记录 viewport 的高度,通常设置为 document.documentElement.clientHeight
    • h:记录每张图片的高度,通常通过 getAttribute('date-h') 获取。
    • index:计算初始时可以同时加载的图片数量。
  • 初始化加载: 根据 viewport 的高度和每张图片的高度,计算初始时可以同时加载的图片数量,并设置这些图片的 src 属性。

    const seeHeight = document.documentElement.clientHeight;
    const h = imgs[0].getAttribute('date-h');
    const index = Math.floor(seeHeight / h);
    for (let i = 0; i <= index; i++) {
    imgs[i].src = imgs[i].getAttribute('date-src');
    }
  • 滚动触发加载: 在页面滚动时,检查是否需要加载下一张图片。具体实现如下:

    window.onscroll = function() {
    for (let i = n; i < imgs.length; i++) {
    const scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
    if (imgs[i].offsetTop < seeHeight + scrollTop) {
    if (imgs[i].getAttribute('src') === '') {
    imgs[i].src = imgs[i].getAttribute('date-src');
    }
    n = i + 1;
    }
    }
    }
  • 注意事项

  • 图片占位图的设置:在页面初次加载时,确保展示一个占位图,以提升用户体验。
  • 自定义属性的命名:选择一个清晰且不易被破坏的自定义属性名,如 date-srcdata-src
  • 图片高度的获取:确保每张图片的 date-h 属性正确反映其实际高度,避免因浏览器缩放导致的不一致。
  • 通过以上方法,可以实现高效的图片懒加载,显著提升页面加载速度,同时减少对内存的占用。

    上一篇:2020 DASCTF&BJD MISC WriteUp
    下一篇:JavaScript删除对象的某个属性的方法

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年04月30日 04时48分44秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    2024版最新网络安全入门必备读书清单(非常详细)零基础入门到精通,收藏这一篇就够了 2023-01-24
    2024版最新网络安全教程从入门到精通,看完这一篇就够了 2023-01-24
    2024网络安全岗就业前景如何?零基础入门到精通,收藏这篇就够了 2023-01-24
    2024零基础如何入门网络安全? 2023-01-24
    2024,java开发,已经炸了吗? 2023-01-24
    2025入门黑客技术必读书籍(非常全面)带你从小白进阶大佬!收藏这一篇就够了 2023-01-24
    2025入门黑客技术必读书籍(非常全面)带你从小白进阶大佬!收藏这篇就够了 2023-01-24
    2025大语言模型入门该怎么学?零基础入门到精通,收藏这篇就够了 2023-01-24
    2025年3月全国计算等级考试(报名操作指南)从零基础到精通,收藏这篇就够了! 2023-01-24
    2025年中国云计算市场四大趋势前瞻,从零基础到精通,收藏这篇就够了! 2023-01-24
    2025年十大最佳漏洞管理工具,从零基础到精通,收藏这篇就够了! 2023-01-24
    2025年网络安全五大趋势与十大威胁预测,从零基础到精通,收藏这篇就够了! 2023-01-25
    2025想做黑客?先来学习 SQL 注入,零基础入门到精通,收藏这篇就够了 2023-01-25
    2025春招计算机就业哪些方向最香?零基础入门到精通,收藏这篇就够了 2023-01-25
    2025最全版《安全技术交底》.docx。从零基础到精通,收藏这篇就够了! 2023-01-25
    2025最新大模型技术学习过程梳理,零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版万字长文入门大语言模型(LLM)零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新0基础怎么转行网络安全?零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新Bash Shell入门指南,零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新C++快速入门(适合小白)零基础入门到精通,收藏这篇就够了 2023-01-25