Ng-lazyload-image: 延迟加载映像不适用于预引导

创建于 2018-04-05  ·  3评论  ·  资料来源: tjoskar/ng-lazyload-image

Preboot (https://github.com/angular/preboot) 使整个应用程序在启动时不可见,这导致延迟加载组件不加载图像 - 函数isVisible返回 false。

fromElement中的rect.ts使用getBoundingClientRect在这种情况下返回 0 个维度。

快速解决方法是将offset属性设置为例如1 ,这使得intersectsWith返回true

最有用的评论

快速解决方法是将 offset 属性设置为例如 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。

快速解决方法是将 offset 属性设置为例如 1,这使得 intersectsWith 返回 true。

这实际上是一个错误,它不应该发生。 我将为它打开一个单独的问题。

我正在关闭这个。 让我知道上面提出的解决方案不起作用。

此页面是否有帮助?
0 / 5 - 0 等级