Ng-lazyload-image: 遅延ロードイメージはプリブートでは機能しません

作成日 2018年04月05日  ·  3コメント  ·  ソース: tjoskar/ng-lazyload-image

Preboot(https://github.com/angular/preboot)を使用すると、起動時にアプリ全体が表示されなくなり、遅延読み込みコンポーネントが画像を読み込まなくなります-関数isVisibleはfalseを返します。

fromElement rect.tsgetBoundingClientRectを使用し、この場合は0次元を返します。

簡単な回避策は、 offset属性をたとえば1に設定することです。これにより、 intersectsWith true返します。

最も参考になるコメント

簡単な回避策は、offset属性をたとえば1に設定することです。これにより、intersectsWithがtrueになります。

これは実際にはバグであり、発生するはずはありません。 別の号を開きます。

全てのコメント3件

こんにちは@ lares83

知らせてくれてありがとうございます。 画像がいつ表示されるかを知る方法がないため、これは非常に難しい問題です。

クイックフィックスは、提案どおりにoffset=1を設定することですが、これにより、ビューポートにない場合でも、すべての画像が表示されたときに読み込まれます。 これは、 ng-lazyload-imageは、画像が表示される前に画像がどこにあるかを知る方法がなく、その時点では遅すぎるためです(ユーザーがスクロールするまで新しいイベントは取得されません)。

これを修正する1つの方法は、 PrebootCompleteイベントをリッスンすることです。

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

そして、テンプレートで:

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

あなたは簡単にラップカスタムコンポーネント作成することができますlazyLoadと一緒に渡すscrollAndPrebootComplete$

別の解決策はIntersectionObserverを使用することですが、これには#304を解決する必要があります。

簡単な回避策は、offset属性をたとえば1に設定することです。これにより、intersectsWithがtrueになります。

これは実際にはバグであり、発生するはずはありません。 別の号を開きます。

これを閉じます。 上記の提案された解決策が機能しなかったことを知らせてください。

このページは役に立ちましたか?
0 / 5 - 0 評価