Ng-lazyload-image: Ленивая загрузка образа не работает с предварительной загрузкой

Созданный на 5 апр. 2018  ·  3Комментарии  ·  Источник: tjoskar/ng-lazyload-image

Предварительная загрузка (https://github.com/angular/preboot) делает все приложение невидимым при запуске, что приводит к тому, что компонент отложенной загрузки не загружает изображение - функция isVisible возвращает false.

fromElement в rect.ts использует getBoundingClientRect который в этом случае возвращает 0 измерений.

Быстрый обходной путь - установить атрибут offset например, 1 что сделает intersectsWith return true .

Самый полезный комментарий

Быстрый обходной путь - установить для атрибута смещения, например, значение 1, в результате чего будет возвращено значение intersectsWith true.

На самом деле это ошибка, этого быть не должно. Я открою для него отдельный выпуск.

Все 3 Комментарий

Привет @ lares83!

Спасибо, что дал мне знать. Это довольно сложный вопрос, поскольку невозможно узнать, когда изображение станет видимым.

Быстрое исправление - установить offset=1 как вы предлагаете, но это приведет к загрузке всех изображений, когда они станут видимыми, даже если они не находятся в области просмотра. Это связано с тем, что у ng-lazyload-image нет способа узнать, где находится изображение, прежде чем оно станет видимым, и в это время уже слишком поздно (мы не получим новое событие, пока пользователь не прокрутит).

Один из способов исправить это - прослушать событие PrebootComplete :

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

А потом в шаблоне:

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

Вы можете легко создать собственный компонент, который обертывает lazyLoad и передает scrollAndPrebootComplete$ .

Другое решение - использовать IntersectionObserver но для этого требуется # 304.

Быстрый обходной путь - установить для атрибута смещения, например, значение 1, в результате чего будет возвращено значение intersectsWith true.

На самом деле это ошибка, этого быть не должно. Я открою для него отдельный выпуск.

Я закрываю это. Сообщите мне, что предложенное выше решение не сработало.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

LobeTia picture LobeTia  ·  6Комментарии

el-davo picture el-davo  ·  4Комментарии

dkmostafa picture dkmostafa  ·  7Комментарии

coryrylan picture coryrylan  ·  7Комментарии

AndreasSchmid1 picture AndreasSchmid1  ·  3Комментарии