Skip to main content

LazyImage

An image component that Lazy loading an assigned image when exposed to a Viewport.

You can resize the image by entering width, height values and at the same time improve the Layout Shift.

You can set the Intersection Observer Option (see Note below).


Interface

interface LazyImageProps
extends React.ComponentProps<'img'>,
IntersectionObserverInit {
src: string;
}

const LazyImage: React.ForwardRefExoticComponent<Omit<LazyImageProps, "ref"> & React.RefAttributes<HTMLImageElement>>

Usage

Default

import { LazyImage } from '@devgrace/react';
import img1 from '../assets/img1.png';
import img2 from '../assets/img2.png';

const Example = () => {
return (
<div>
{/* ... */}
<LazyImage width={400} height={400} src={img1} alt="img1" />
{/* ... */}
<LazyImage width={400} height={400} src={img2} alt="img2" />
{/* ... */}
</div>
);
};

Fallback

import { LazyImage } from '@devgrace/react';
import img1 from '../assets/img1.png';

const Example = () => {
const [isLoaded, setIsLoaded] = useState(false);

const wrapperStyle: CSSProperties = {
position: 'relative',
width: '400px',
height: '400px',
};

const imgStyle: CSSProperties = {
position: 'absolute',
top: 0,
left: 0,
opacity: isLoaded ? 1 : 0,
transition: 'opacity 0.2s',
};

const skeletonStyle: CSSProperties = {
width: '400px',
height: '400px',
backgroundColor: '#cdcbcb',
}

return (
<div style={wrapperStyle}>
{!isLoaded && <div style={skeletonStyle} />}
<LazyImage
style={imgStyle}
width={400}
height={400}
src={img1}
alt="img1"
onLoad={() => setIsLoaded(true)}
/>
</div>
);
};

Example

Please scroll down.

img1
img2
img3

Note

Intersection Observer API