afterimage v0.0.2
Afterimage
Images that load after they have been scrolled in to view.
Demo: https://build-63d9j8yeh.now.sh/
Installation
npm i --save afterimageOr if yarn's your jam:
yarn add afterimageUsage
For a complete example, visit here.
import * as React from "react";
import AfterImage from "afterimage";
export default function App() {
return (
<>
<div style={{ height: "120vh" }} />
<AfterImage src="some-image.jpg" />
☝️ is sooooo lazy!
</>
);
}How it works
A blog post is in the works but simply put, afterimage uses a IntersectionObserver to determine whether the image is in the viewport and defers applying the src attribute of the <img /> tag until it is.
Props
Afterimage assumes the image is of aspect ratio 16:9 and will render a placeholder element in place of the actual image whilst the image is off-screen or is loading. If you wish to turn this behavior off, either specify an aspectHeight
and aspectWidth or set withPlaceholder to false.
interface Props {
src: string;
className?: string;
onLoad?: () => any;
aspectHeight?: number;
aspectWidth?: number;
withPlaceholder?: boolean;
}srcThe source of the image (just like you would with an<img />tag).classNameOptional string passed to the top level element for styling. Doesn't replace any CSS classes listed belowonLoadoptional callback called when the image has fully loaded.aspectHeightOptional number representing the image's aspect ratio height, i.e.9in16:9. Used to size the placeholder element. Defaults to9.aspectWidthSimilar toaspectHeight. Defaults to16.withPlaceholderboolean to determine whether to render a placeholder element or not. Useful if you do not know the aspect ratio of the image ahead of time.
Afterimage will spread any other given props to the <img /> tag. For example, alt, onClick etc.
CSS classes
CSS class names are structured with BEM and can be overridden with CSS. Afterimage comes with default inline styles.
afterimageapplied to the top level elementafterimage--loadedapplied when afterimage has loaded the image in to viewafterimage__imageapplied to the<img />tag itselfafterimage__placeholderapplied to the placeholder element