图片懒加载
为什么需要图片懒加载
默认情况下,访问多图片的页面时,即使图片不在用户当前视窗内,也会会占据用户的带宽,影响其他资源加载,影响用户的体验。
图片懒加载的原理
1. 当页面加载时加载一个尺寸很小的占位图片(1kb 以下),然后再通过 js 选择性的去加载真正的图片。
实现如下
1 | //html |
测试发现,必须使用 script 的 src 引入 js 文件,否则图片加载的优先级不变。
2. 滚动到视窗内再加载图片
运用Intersection Observer
我们可以做到当图片滚动到视窗后再加载该图片。
1 | //js |
3. 原生 JS 实现懒加载
API:
document.documentElement.clientHeight
/window.innerHTML
,获取屏幕的可视区域(根元素 HTML)的高度document.documentElement.scrollTop
,获取页面根元素(HTML)顶部与浏览器窗口顶部之间的距离,也就是滚动条的滚动距离element.offsetTop
,获取当前元素相对于文档顶部的高度
元素是否在可视区域判断公司:offsetTop-scrollTop<clientHeight
1 | (function lazyLoad() { |
React 实现图片懒加载
实现节流 hook
1 | import { useState, useEffect } from "react"; |
图片加载 hook
1 | import React, { useState, useEffect, useRef } from "react"; |
使用
1 | import React, { useRef } from "react"; |