加载图像后如何取消观察?
how to unobserve after image is loaded?
我正在 lazy-load
我的图像。 view port
我正在加载我的 image.it 工作正常。我可以在查看时加载图像 port.But 我遇到一个问题。
当我松开视口时,我的图像是 gone
并返回它获取 again.so 我需要 unobserve
我的监听器。
这是我的代码
https://codesandbox.io/s/frosty-lovelace-yjfl9?file=/src/App.js
const Card = ({ src }) => {
const target = useRef();
const root = useRef();
const [isThingIntersecting, setThingIntersecting] = useState(false);
console.log("isThingIntersecting", isThingIntersecting);
useIntersectionObserver({
root,
target,
rootMargin: "0px",
threshold: 0.02,
// What do we do when it intersects?
// The signature of this callback is (collectionOfIntersections, observerElement).
onIntersect: ([{ isIntersecting }]) => setThingIntersecting(isIntersecting)
});
return (
<img className={"img"} ref={target} src={isThingIntersecting ? src : ""} />
);
};
这一行出现问题src={isThingIntersecting ? src : ""}
当它为真时它获取图像。但是当它离开视口时它删除图像并且当它再次出现时它再次获取。
我们可以 unobserve
获取图像时的目标吗?我不想一次又一次地获取。
这是我的代码
https://codesandbox.io/s/frosty-lovelace-yjfl9?file=/src/App.js:732-1349
使用 Intersection Observer
延迟加载图像的基本思想是仅当图像到达视口时才获取图像。因此,您将能够节省字节数并且初始页面加载会更顺畅。
要分析视口 Intersection Observer
可以使用 API。
这是您在用户离开图像时移除图像的错误 src
。为避免这种情况,您可以在图像的 intersect 为真时设置图像 src 一次。您可以使用 onIntersect
添加该逻辑。
对您的代码进行了一些调整Here
改进:
- 设置图像源后立即移除观察者。
图片加载完成后就不需要再在图片上观察了。您可以在设置图像 src
属性后删除事件侦听器。
我正在 lazy-load
我的图像。 view port
我正在加载我的 image.it 工作正常。我可以在查看时加载图像 port.But 我遇到一个问题。
当我松开视口时,我的图像是 gone
并返回它获取 again.so 我需要 unobserve
我的监听器。
这是我的代码 https://codesandbox.io/s/frosty-lovelace-yjfl9?file=/src/App.js
const Card = ({ src }) => {
const target = useRef();
const root = useRef();
const [isThingIntersecting, setThingIntersecting] = useState(false);
console.log("isThingIntersecting", isThingIntersecting);
useIntersectionObserver({
root,
target,
rootMargin: "0px",
threshold: 0.02,
// What do we do when it intersects?
// The signature of this callback is (collectionOfIntersections, observerElement).
onIntersect: ([{ isIntersecting }]) => setThingIntersecting(isIntersecting)
});
return (
<img className={"img"} ref={target} src={isThingIntersecting ? src : ""} />
);
};
这一行出现问题src={isThingIntersecting ? src : ""}
当它为真时它获取图像。但是当它离开视口时它删除图像并且当它再次出现时它再次获取。
我们可以 unobserve
获取图像时的目标吗?我不想一次又一次地获取。
这是我的代码 https://codesandbox.io/s/frosty-lovelace-yjfl9?file=/src/App.js:732-1349
使用 Intersection Observer
延迟加载图像的基本思想是仅当图像到达视口时才获取图像。因此,您将能够节省字节数并且初始页面加载会更顺畅。
要分析视口 Intersection Observer
可以使用 API。
这是您在用户离开图像时移除图像的错误 src
。为避免这种情况,您可以在图像的 intersect 为真时设置图像 src 一次。您可以使用 onIntersect
添加该逻辑。
对您的代码进行了一些调整Here
改进:
- 设置图像源后立即移除观察者。
图片加载完成后就不需要再在图片上观察了。您可以在设置图像 src
属性后删除事件侦听器。