A progressive image element
Progressively enhance image placeholders once they are in the viewport.
$ npm install progressive-image-element
<!-- Include the stylesheet, this could be direct from the package or CDN -->
<link rel="stylesheet" href="https://unpkg.com/progressive-image-element@latest/dist/progressive-image-element.css" />
<!-- Include the custom element script, this could be direct from the package or CDN -->
<script src="https://unpkg.com/progressive-image-element@latest/dist/index.js"></script>
or
// Import the custom element script
import ProgressiveImageElement from 'progressive-image-element';
<progressive-image>
element markup <progressive-image
src="example-image-1x.jpg"
srcset="example-image-2x.jpg 2x, example-image-1x.jpg 1x"
>
<!-- Make sure to specify image dimensions -->
<img src="placeholder-image.jpg" width="300" height="200" alt="Image" />
</progressive-image>
The placeholder image should be a solid color placeholder, LQIP or SQIP that hint at the content of the progressive image before it loads.
src
Specifies the image to displaysrcset
One or more image candidate stringssizes
Comma-separated list of source size descriptorssavedata
Boolean attribute to load the images only after a click/tap on the placeholder image. slow-2g|2g|3g
).A CSS class loadable
is present on <progressive-image>
when the image is ready to load on user interaction (click
).
Used for slow connections or when the savedata
attribute is present.
progressive-image.loadable { ... }
A CSS class [loading]
is present on <progressive-image>
while the image is loading.
progressive-image.loading { ... }
A CSS class .loaded
is present on <img>
children of <progressive-image>
when the image was loaded.
progressive-image > img { opacity: 0; }
progressive-image > img.loaded { opacity: 1; }
Browsers without native custom element support require a polyfill.
MIT © André Ruffert