前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浏览器 IMG 图片原生懒加载 loading="lazy"

浏览器 IMG 图片原生懒加载 loading="lazy"

作者头像
Cell
发布2023-03-08 21:39:24
1.5K0
发布2023-03-08 21:39:24
举报
文章被收录于专栏:Cell的前端专栏Cell的前端专栏

记录使用 HTML 原生方案实现图片的懒加载。

语法规范

HTML loading 属性适用于 imgiframe,语法规范见 HTML Standard - Lazy loading attributes

关键词

状态

描述

lazy

懒惰的

用于延迟获取资源,直到满足某些条件。

eager

渴望的

用于立即获取资源;默认状态。

属性的 缺失值默认值无效值默认值 都是 Eager状态。

实际应用

基于 FixIt 主题 版本大于 v0.2.18 的博客网站使用就是原生的懒加载方案,大致如下:

代码语言:javascript
复制
<img
  loading="lazy"
  src="./example.jpg"
  data-title="title text"
  data-alt="alt text"
  onload="this.title=this.dataset.title;this.alt=this.dataset.alt;for(const a of ['data-title','data-alt','onerror','onload']){this.removeAttribute(a);}this.dataset.lazyloaded='';"
  onerror="this.title=this.dataset.title;this.alt=this.dataset.alt;for(const a of ['data-title','data-alt','onerror','onload']){this.removeAttribute(a);}"
/>

为了达到 loading 的效果,以上代码中在 onload 后会给图片加上一个 data-lazyloaded 属性,所以我们可以这样来写 css 以达到显示 loading 图标的效果:

代码语言:javascript
复制
img[loading='lazy']:not([data-lazyloaded]) {
  background: url(loading.svg) no-repeat center;
}

设置 data-titledata-alt 是因为移动浏览器大多数只要有 titlealt 就会显示图片的替代字符,所以等到图片加载完或加载失败后再回填。

懒加载特性的研究

以下结论来自 浏览器IMG图片原生懒加载loading=”lazy”实践指南 « 张鑫旭-鑫空间-鑫生活 总结部分。

  1. Lazy loading加载数量与屏幕高度有关,高度越小加载数量越少,但并不是线性关系.
  2. Lazy loading加载数量与网速有关,网速越慢,加载数量越多,但并不是线性关系。
  3. Lazy loading加载没有缓冲,滚动即会触发新的图片资源加载。
  4. Lazy loading加载在窗口resize尺寸变化时候也会触发,例如屏幕高度从小变大的时候。
  5. Lazy loading加载也有可能会先加载后面的图片资源,例如页面加载时滚动高度很高的时候。

参考链接

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 语法规范
  • 实际应用
  • 懒加载特性的研究
  • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档