Ng-lazyload-image: Lazy-Load-Image funktioniert nicht mit Preboot

Erstellt am 5. Apr. 2018  ·  3Kommentare  ·  Quelle: tjoskar/ng-lazyload-image

Preboot (https://github.com/angular/preboot) macht die gesamte App beim Start nicht sichtbar, was dazu führt, dass die Lazy-Load-Komponente das Bild nicht lädt - Funktion isVisible gibt false zurück.

fromElement in rect.ts verwendet getBoundingClientRect was in diesem Fall 0 Dimensionen zurückgibt.

Eine schnelle Problemumgehung besteht darin, das Attribut offset auf zB 1 , wodurch intersectsWith true .

Hilfreichster Kommentar

Eine schnelle Problemumgehung besteht darin, das Offset-Attribut auf zB 1 zu setzen, was intersectsWith zur Rückgabe true macht.

Das ist eigentlich ein Bug, das sollte nicht passieren. Ich werde dafür ein separates Thema eröffnen.

Alle 3 Kommentare

Hallo @lares83 ,

Danke für die Information. Dies ist ein ziemlich kniffliges Problem, da es keine Möglichkeit gibt zu wissen, wann das Bild sichtbar wird.

Ein Quickfix besteht darin, offset=1 wie von Ihnen vorgeschlagen festzulegen, aber das führt dazu, dass alle Bilder geladen werden, wenn sie sichtbar werden, auch wenn sie sich nicht im Ansichtsfenster befinden. Dies liegt daran, dass ng-lazyload-image keine Möglichkeit haben, zu wissen, wo sich das Bild befindet, bevor es sichtbar wird, und es zu diesem Zeitpunkt zu spät ist (wir erhalten kein neues Ereignis, bis der Benutzer scrollt).

Eine Möglichkeit, das Problem zu beheben, besteht darin, auf das Ereignis PrebootComplete warten:

constructor() {
  this.scrollAndPrebootComplete$ = Observable.merge(
    Observable.fromEvent(window, 'scroll'),
    Observable.fromEvent(window, 'PrebootComplete')
  );
}

Und dann in der Vorlage:

<img [lazyLoad]="lazyLoadImage" [scrollObservable]="scrollAndPrebootComplete$" />

Sie können ganz einfach eine benutzerdefinierte Komponente erstellen, die lazyLoad umschließt und scrollAndPrebootComplete$ .

Eine andere Lösung besteht darin, IntersectionObserver aber dafür muss #304 aufgelöst werden.

Eine schnelle Problemumgehung besteht darin, das Offset-Attribut auf zB 1 zu setzen, was intersectsWith zur Rückgabe true macht.

Das ist eigentlich ein Bug, das sollte nicht passieren. Ich werde dafür ein separates Thema eröffnen.

Ich schließe das. Lassen Sie mich wissen, dass die oben vorgeschlagene Lösung nicht funktioniert hat.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

coryrylan picture coryrylan  ·  7Kommentare

myrsk picture myrsk  ·  6Kommentare

el-davo picture el-davo  ·  4Kommentare

LobeTia picture LobeTia  ·  6Kommentare

vincent-cm picture vincent-cm  ·  10Kommentare