Ng-lazyload-image: L'image de chargement paresseux ne fonctionne pas avec le pré-démarrage

Créé le 5 avr. 2018  ·  3Commentaires  ·  Source: tjoskar/ng-lazyload-image

Le pré-démarrage (https://github.com/angular/preboot) rend l'ensemble de l'application invisible au démarrage, ce qui empêche le composant de chargement paresseux de charger l'image - la fonction isVisible renvoie false.

fromElement dans rect.ts utilise getBoundingClientRect qui, dans ce cas, renvoie 0 dimension.

La solution de contournement rapide consiste à définir l'attribut offset sur par exemple 1 ce qui fait que intersectsWith renvoie true .

Commentaire le plus utile

Une solution de contournement rapide consiste à définir l'attribut offset sur par exemple 1, ce qui rend intersectsWith vrai.

C'est en fait un bug, ça ne devrait pas arriver. Je vais ouvrir un sujet séparé pour ça.

Tous les 3 commentaires

Salut @lares83 ,

Merci de me le faire savoir. C'est un problème assez délicat car il n'y a aucun moyen de savoir quand l'image devient visible.

Une solution rapide consiste à définir offset=1 comme vous le suggérez, mais cela entraînera le chargement de toutes les images lorsqu'elles deviendront visibles, même si elles ne sont pas dans la fenêtre d'affichage. C'est parce que ng-lazyload-image n'a aucun moyen de savoir où se trouve l'image avant qu'elle ne devienne visible et à ce moment-là, il est trop tard (nous n'obtiendrons pas de nouvel événement tant que l'utilisateur n'aura pas fait défiler).

Une façon de résoudre ce problème est d'écouter l'événement PrebootComplete :

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

Et puis dans le modèle :

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

Vous pouvez facilement créer un composant personnalisé qui enveloppe lazyLoad et transmet scrollAndPrebootComplete$ .

Une autre solution consiste à utiliser IntersectionObserver mais cela nécessite la résolution de #304.

Une solution de contournement rapide consiste à définir l'attribut offset sur par exemple 1, ce qui rend intersectsWith vrai.

C'est en fait un bug, ça ne devrait pas arriver. Je vais ouvrir un sujet séparé pour ça.

Je ferme ça. Faites-moi savoir que la solution proposée ci-dessus n'a pas fonctionné.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

coryrylan picture coryrylan  ·  7Commentaires

tjoskar picture tjoskar  ·  4Commentaires

rimlin picture rimlin  ·  5Commentaires

stratio84 picture stratio84  ·  6Commentaires

AzerHeshim picture AzerHeshim  ·  5Commentaires