An image preload module for Angular using IntersectionObserver in favour of scroll listener's.
npm install --save @jaspero/ng-image-preload
A demo can be found here:
https://jaspero.github.io/ng-image-preload/
Import JpImagePreloaderModule in your @NgModule:
@NgModule({
imports: [
JpImagePreloaderModule.forRoot()
],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {}Then in your component initialize the service:
class AppComponent implements OnInit {
constructor(private preload: JpPreloadService) {}
ngOnInit() {
this.preload.initialize();
}
}The initialize method accepts an optional options object:
| Name | Type | Default |
|---|---|---|
| rootMargin | string | 0 50px |
| threshold | number | 0.1 |
A description for this options can be found here.
There are two ways to consume the library. Using the service or the directive.
Inject the PreloadService in to a component.
constructor(
private preload: PreloadService
) {}
// Then add an image element to the que like this:
addImage(element: HTMLElement, config: ElementConfig) {
this.preload.addImage(element, config);
}You can add the jpPreload directive to an img element like this:
<img src="initialImage.jpg" jpPreload="someImage.jpg"></img>The initialImage.jpg will not be preloaded, this is usually a spinner or some other light image.
The someImage.jpg image will be shown when the element is in view.
If you need to preload a background image the jpPreload directive can be placed on any html element like this:
<div class="some-element" jpPreload="someImage.jpg"></div>To show an image initially you can add a css background-image to the class. This image will then be replaced when the element is in view.
You can also attach a fallback (loads if the requested image fails) like this:
<img
src="initialImage.jpg"
jpPreload="someImage.jpg"
fallback="someFallback.jpg"
/>MIT © Jaspero co.