Javascript 图像加载后如何取消服务?
我正在对我的图像进行Javascript 图像加载后如何取消服务?,javascript,reactjs,react-redux,lazy-loading,Javascript,Reactjs,React Redux,Lazy Loading,我正在对我的图像进行延迟加载。当涉及到查看端口时我正在加载我的图像。它工作正常。当涉及到查看端口时,我能够加载图像。但我面临一个问题 当我松开查看端口时,我的图像已消失并再次返回,因此我需要取消查看我的列表 这是我的密码 const Card=({src})=>{ const target=useRef(); const root=useRef(); const[isThingIntersecting,setThingIntersecting]=useState(false); log(“is
延迟加载。当涉及到查看端口时
我正在加载我的图像。它工作正常。当涉及到查看端口时,我能够加载图像。但我面临一个问题
当我松开查看端口时,我的图像已消失
并再次返回,因此我需要取消查看
我的列表
这是我的密码
const Card=({src})=>{
const target=useRef();
const root=useRef();
const[isThingIntersecting,setThingIntersecting]=useState(false);
log(“isThingIntersecting”,isThingIntersecting);
使用IntersectionObserver({
根,
目标,,
rootMargin:“0px”,
阈值:0.02,
//当它相交时我们该怎么办?
//此回调的签名是(CollectionFinterSections,observerElement)。
onIntersect:([{isIntersecting}])=>setThingIntersecting(isIntersecting)
});
返回(
);
};
在这一行中,问题发生了src={isThingIntersecting?src:“}
当它为true时,它获取图像。但是当它离开查看端口时,它删除图像,当它再次出现时,它再次获取图像
我们可以在目标提取图像时取消对其的观测吗?我不想一次又一次地提取图像
这是我的密码
使用交叉点观察者延迟加载图像的基本思想是仅在图像到达视口时提取图像。因此,您将能够节省字节,并且初始页面加载将更加平滑
可以使用API分析视口交点观察者
这里是当用户离开图像时删除图像src
的错误。为了避免在图像的intersect为真时,可以设置一次图像src。您可以使用onIntersect
添加该逻辑
对代码做了一些调整
改进:
- 设置图像源后立即移除观察者
图像加载后,您不再需要在图像上观察。设置图像src
属性后,可以删除事件侦听器。使用交叉点观察者延迟加载图像的基本思想是仅在图像到达视口时提取图像。因此,您将能够节省字节,并且初始页面加载将更加平滑
可以使用API分析视口交点观察者
这里是当用户离开图像时删除图像src
的错误。为了避免在图像的intersect为真时,可以设置一次图像src。您可以使用onIntersect
添加该逻辑
对代码做了一些调整
改进:
- 设置图像源后立即移除观察者
图像加载后,您不再需要在图像上观察。您可以在设置imagesrc
属性后删除事件侦听器。这里的用例是什么?您希望在视口中显示图像,然后图像应保持不变。正确?是的正确..这就是用例您的用例是什么?您希望在视口中显示图像,然后图像应保持不变。正确?是的,正确..这就是用例
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 : ""} />
);
};