Preboot (https://github.com/angular/preboot) 使整个应用程序在启动时不可见,这导致延迟加载组件不加载图像 - 函数isVisible
返回 false。
fromElement
中的rect.ts
使用getBoundingClientRect
在这种情况下返回 0 个维度。
快速解决方法是将offset
属性设置为例如1
,这使得intersectsWith
返回true
。
嗨@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。
快速解决方法是将 offset 属性设置为例如 1,这使得 intersectsWith 返回 true。
这实际上是一个错误,它不应该发生。 我将为它打开一个单独的问题。
我正在关闭这个。 让我知道上面提出的解决方案不起作用。
最有用的评论
这实际上是一个错误,它不应该发生。 我将为它打开一个单独的问题。