Saya menggunakan ng-lazyload-image dalam koleksi yang dapat difilter. Ini berfungsi dengan baik saat menggulir, tetapi ketika saya memfilter daftar, gambar mini tidak muncul. Itu terjadi karena tidak ada acara gulir yang diaktifkan. Setelah menggulir sedikit, mereka muncul.
Saya menemukan solusi yang meretas, tetapi saya tidak menyukainya…
// -1, +1 is there to fire the scroll event. Otherwise chrome/ff wont fire it.
window.scrollTo(window.scrollX, window.scrollY - 1);
window.scrollTo(window.scrollX, window.scrollY + 1);
Hai @philipgiuliani ,
Masalahnya adalah bahwa ng-lazyload-image
hanya memeriksa apakah gambar ada di viewport saat pengguna menggulir. Selama tidak ada acara gulir, ng-lazyload-image
tidak akan melakukan apa pun.
Jadi untuk menyelesaikan kasus penggunaan Anda, kami perlu memberi tahu ng-lazyload-image
bahwa dunia di sekitarnya telah berubah. Ada dua cara untuk melakukannya:
ng-lazyload-image
untuk memvalidasi ulang apakah gambar ada di viewport atau tidak. Tapi solusinya tidak bagus (seperti yang Anda isyaratkan).// In your component
constructor() {
this.updateSearchResult$ = new Subject();
this.scrollAndSearch$ = Observable.merge(
Observable.fromEvent(window, 'scroll')
this.updateSearchResult$
);
}
onSerachResultResponse() {
this.updateSearchResult$.next()
}
// in your template
<img [lazyLoad]="lazyLoadImage" [customObservable]="scrollAndSearch$" />
Apakah ini menjawab pertanyaanmu?
Saya sedang mencari solusi untuk masalah serupa, dan ingin membagikannya, karena saya menduga masalah ini adalah tempat orang mungkin akan menemukannya.
Masalah : memuat gambar setelah penundaan, meskipun gambar tidak terlihat dalam offset
Solusi : alih-alih offset tetap, buat Observable untuk nilai offset, dan tetapkan offset yang sangat tinggi setelah waktu yang diinginkan
// in the Angular 2+ component
constructor () {
this.imageLoadOffset$ = Observable.merge(
Observable.of(300), // initial offset
Observable.of(100000).delay(5000) // offset triggering loading after 5 seconds
);
}
// in the template
<img [lazyLoad]="'foo.png'" [offset]="imageLoadOffset$ | async" />
Terima kasih atas kontribusi Anda, saya menambahkan tautan ke masalah ini di file readme.
Saat saya menggulir penampung dengan cepat, gambar yang digulir tidak dimuat. Setelah menggulir, saya memuat gambar di viewport saat ini. Apa yang harus saya lakukan? ?
@pangshangggg , maaf tapi saya tidak mengerti. Saya mencoba menggunakan google translate tetapi saya tidak mengerti pertanyaan Anda: / mungkinkah Anda menulis dalam bahasa Inggris?
Di Ionic 2/3, gambar tidak dimuat sampai pengguna mulai menggulir. Anda dapat menyelesaikannya dengan dua cara:
Cara paling jelek adalah seperti ini:
@ViewChild(Content) container: Content;
ionViewDidEnter() {
this.container.scrollTo(this.container.scrollLeft, this.container.scrollTop + 1);
this.container.scrollTo(this.container.scrollLeft, this.container.scrollTop - 1);
}
Dan inilah cara yang baik:
@ViewChild(Content) container: Content;
contentLoaded: Subject<any> = new Subject();
loadAndScroll: Observable<any>;
ionViewDidEnter() {
this.contentLoaded.next();
}
ionViewDidLoad() {
this.loadAndScroll = Observable.merge(
this.container.ionScroll,
this.contentLoaded
);
}
(in the template : [customObservable]="loadAndScroll" )
Saya baru saja mengubah solusi yang diposting di atas menjadi ionik. Tidak ada lagi :)
Di Angular 6 dan rxjs 6, saya mencoba memicu secara manual peristiwa lazy load dengan menggulir dengan mengikuti contoh sebelumnya tetapi tidak berfungsi. Semua gambar dimuat satu demi satu tanpa menggulir halaman. Ini kode saya.
Template:
<div *ngFor="let image of images">
<img [defaultImage]="defaultImage"
[lazyLoad]="image"
[useSrcset]="true"
[offset]="offset" [scrollObservable]="scrollObservable" >
</div>
komponen:
scrollObservable = fromEvent(window, 'scroll');
Saya mengikuti contoh ini dari masalah 224 di mana el-Davo mengatakan bahwa ini memperbaiki masalah di Angular 5
Di Ionic 2/3, gambar tidak dimuat sampai pengguna mulai menggulir. Anda dapat menyelesaikannya dengan dua cara:
Cara paling jelek adalah seperti ini:@ViewChild(Content) container: Content; ionViewDidEnter() { this.container.scrollTo(this.container.scrollLeft, this.container.scrollTop + 1); this.container.scrollTo(this.container.scrollLeft, this.container.scrollTop - 1); }
Dan inilah cara yang baik:
@ViewChild(Content) container: Content; contentLoaded: Subject<any> = new Subject(); loadAndScroll: Observable<any>; ionViewDidEnter() { this.contentLoaded.next(); } ionViewDidLoad() { this.loadAndScroll = Observable.merge( this.container.ionScroll, this.contentLoaded ); } (in the template : [scrollObservable]="loadAndScroll" )
Saya baru saja mengubah solusi yang diposting di atas menjadi ionik. Tidak ada lagi :)
maaf tapi saya punya masalah
this.contentLoaded.next ();
tidak bekerja
Ini berfungsi dengan baik hanya saat menggulir
???
Hai @arinara ,
Saat Anda mengatakan not working
, apakah ada kesalahan?
Hai
Tidak ada kesalahan yang terjadi
@zarinara , dapatkah Anda membuat terbitan baru dan menyertakan beberapa contoh kode dan nomor versi ng-lazyload-image
( npm ls ng-lazyload-image
). Apakah mungkin bagi Anda untuk menggunakan intersectionObserver
?
Komentar yang paling membantu
Hai @philipgiuliani ,
Masalahnya adalah bahwa
ng-lazyload-image
hanya memeriksa apakah gambar ada di viewport saat pengguna menggulir. Selama tidak ada acara gulir,ng-lazyload-image
tidak akan melakukan apa pun.Jadi untuk menyelesaikan kasus penggunaan Anda, kami perlu memberi tahu
ng-lazyload-image
bahwa dunia di sekitarnya telah berubah. Ada dua cara untuk melakukannya:ng-lazyload-image
untuk memvalidasi ulang apakah gambar ada di viewport atau tidak. Tapi solusinya tidak bagus (seperti yang Anda isyaratkan).Apakah ini menjawab pertanyaanmu?