Preboot (https://github.com/angular/preboot) membuat seluruh aplikasi tidak terlihat di awal yang menyebabkan komponen lazy load tidak memuat gambar - fungsi isVisible
mengembalikan false.
fromElement
di rect.ts
menggunakan getBoundingClientRect
yang dalam hal ini mengembalikan 0 dimensi.
Solusi cepat adalah menyetel atribut offset
ke misalnya 1
yang membuat intersectsWith
kembali true
.
Hai @lares83 ,
Terima kasih telah memberi tahu saya. Ini adalah masalah yang cukup rumit karena tidak ada cara untuk mengetahui kapan gambar menjadi terlihat.
Perbaikan cepat adalah menyetel offset=1
seperti yang Anda sarankan, tetapi itu akan menyebabkan semua gambar dimuat saat terlihat, meskipun tidak ada di area pandang. Ini karena ng-lazyload-image
tidak memiliki cara untuk mengetahui di mana gambar itu sebelum terlihat dan pada saat itu sudah terlambat (kami tidak akan mendapatkan acara baru sampai pengguna menggulir).
Salah satu cara untuk memperbaikinya adalah dengan mendengarkan acara PrebootComplete
:
constructor() {
this.scrollAndPrebootComplete$ = Observable.merge(
Observable.fromEvent(window, 'scroll'),
Observable.fromEvent(window, 'PrebootComplete')
);
}
Dan kemudian di templat:
<img [lazyLoad]="lazyLoadImage" [scrollObservable]="scrollAndPrebootComplete$" />
Anda dapat dengan mudah membuat komponen khusus yang membungkus lazyLoad
dan meneruskan scrollAndPrebootComplete$
.
Solusi lain adalah menggunakan IntersectionObserver
tetapi itu membutuhkan #304 untuk diselesaikan.
Solusi cepat adalah menyetel atribut offset ke misalnya 1 yang membuat intersectsWith kembali benar.
Itu sebenarnya bug, seharusnya tidak terjadi. Saya akan membuka edisi terpisah untuk itu.
Aku menutup ini. Beri tahu saya bahwa solusi yang diusulkan di atas tidak berhasil.
Komentar yang paling membantu
Itu sebenarnya bug, seharusnya tidak terjadi. Saya akan membuka edisi terpisah untuk itu.