lazy-loading - IntersectionObserver,立即加载图像而不是延迟加载
问题描述
我正在尝试使用 IntersectionObserver 延迟加载图像。但是,所有图像都会在它们通过滚动进入视口之前立即加载。我知道这一点是因为我在向下滚动之前查看了 Network 选项卡和 Inspector 以查看它们的位置。
我已经在 Windows Chrome 中尝试过这个。
https://jsfiddle.net/Ln4gv7mw/
HTML:
<img src="placeholder.png" data-src="image1">
<img src="placeholder.png" data-src="image2">
<img src="placeholder.png" data-src="image3">
JAVASCRIPT
let observer = new IntersectionObserver(
(entries, observer) => {
entries.forEach(entry => {
/* Placeholder replacement */
entry.target.src = entry.target.dataset.src;
observer.unobserve(entry.target);
});
},
{rootMargin: "0px 0px 0px 0px"});
document.querySelectorAll('img').forEach(img => { observer.observe(img) });
解决方案
我必须检查 entry.isIntersecting。https://jsfiddle.net/81w79sg3/
我还将 rootMargin 设置为 100px,这使得图像在滚动到视图之前加载。Rootmargin 在 jsfiddle 中不起作用(关于 iframe,但适用于真实页面)
let observer = new IntersectionObserver(
(entries, observer) => {
entries.forEach(entry => {
if(entry.isIntersecting){
entry.target.src = entry.target.dataset.src;
observer.unobserve(entry.target);
}
});
});
document.querySelectorAll('img').forEach(img => { observer.observe(img) });
推荐阅读
- scala - 在 Redis 中存储和操作“json 列表”的最佳方法是什么?
- linux - 在 Linux 上设置 zram 设备磁盘大小有什么限制吗?
- javascript - 分配innerHTML时会出现异常吗?
- javascript - 即使 html 文档中不存在标题标签,浏览器也会显示标题
- ios - 工作区警告:目标 Pod 无法链接框架 Foundation.framework
- android - 织物库中的格式错误的异常
- database - 在 .net-core 中处理数据库连接
- git - Gitlab Shell 错误从 10.5 更新到 10.6
- mysql - 字段列表中的列“lang_id”不明确
- python - 如何在用逗号分割后仅从python数据框中提取具有值的条目