A svelte component to lazyload any content including images.
npm i svelte-lazy
For sapper server-side rendering and using external components, install it to devDependencies
:
npm i -D svelte-lazy
<script>
import Lazy from 'svelte-lazy';
</script>
<Lazy height={300}>
<img alt="" src="https://picsum.photos/id/412/200/300" />
</Lazy>
-
height: Number|String
Default:0
. Height of the component before load.Set a proper value to avoid scroll bounce. One way is to use the content height which can be mensured by the inspector in the devTool after load.
-
offset: Number
Default:150
. Offset to the bottom of the viewport that triggers loading when the component is in the scope.
The Number value uses
px
as unit.
-
placeholder: String|Component
Default:null
. Placeholder before load. -
placeholderProps: Object
Defaultnull
. When using a component as a placeholder, the props will be passed to it. -
class: String
Default:''
. Additional class for the container div. It will besvelte-lazy ${class}
. -
fadeOption: Object
Default:{ delay: 0, duration: 400 }
. Option for the fade in transition. Setnull
to disable it. -
onload: Function (node) => {}
Default:null
. Fucntion that is called when loaded. -
resetHeightDelay: Number
Default:0
(milliseconds). Delay to reset the component height toauto
after loaded. Might be useful to wait for remote resources like images.
v0 -> v1.0
- Adjust dom structure
- Optimize image loading
enter viewport / no image -> loaded
not loaded --------------->
\ with image -> load event -> loaded
|
show placeholder | show content
Before load
<div class="svelte-lazy ${class}">
<div class="svelte-lazy-placeholder">...</div>
</div>
After load
<div class="svelte-lazy ${class}">
<div class="svelte-lazy-content">...</div>
</div>
git clone https://github.com/leafOfTree/svelte-lazy
cd svelte-lazy
npm i
npm start
npm test
For the maintainer, bump the version in package.json
then run npm publish
.
Based on sveltejs/component-template: A base for building shareable Svelte components