我有一个图片密集型网站,用knockout构建,包括jQuery。
这些都在foreach循环中:
那段代码会查找视窗中的图像(使用自定义选择器仅查找屏幕上的图像),然后将
我在Twitter上得到了关于另一个lazyloading库的答案。那并没有解决问题-问题是不理解DOM和ko表示形式需要如何交互来设置lazyloading。 我相信我需要更好地考虑创建一个knockout模型,该模型设置< code>imageTmp ,并根据是否在视口中响应lazyloading,然后在加载完
这些都在foreach循环中:
<!-- ko foreach: {data: categories, as: 'categories'} -->
<!-- Category code -->
<!-- ko foreach: {data: visibleStations, as: 'stations'} -->
<!-- specific code -->
<img class="thumb lazy" data-bind="attr: { src: imageTmp,
'data-src': imageThumb,
alt: name,
'data-original-title': name },
css: {'now-playing-art': isPlaying}">
<!-- /ko -->
<!-- /ko -->
基本上,当我创建这些元素时,imageTmp是一个计算的可观察对象,返回临时url,而imageThumb则设置为来自CDN的真实url。
我还有一段代码,称之为Lazy Sweeper:
var lazyInterval = setInterval(function () {
$('.lazy:in-viewport').each(function () {
$(this).attr('src', $(this).data('src')).bind('load', function(){
$(this).removeClass('lazy')
});
});
}, 1000);
那段代码会查找视窗中的图像(使用自定义选择器仅查找屏幕上的图像),然后将
src
设置为data-src
。我们想要的行为是避免加载用户看不到的大量(实际上只有几百张)图片所带来的开销。但是我们看到的行为是,在第一次加载后,似乎在调用ko.applyBindings()
之后,懒加载程序被破坏了,我们看到图片恢复为默认图片。然后再次运行懒加载程序,我们才看到它们展示出来。我们不清楚如何更好地以knockout方式实现这一点。你有什么想法吗?见解?建议?
我在Twitter上得到了关于另一个lazyloading库的答案。那并没有解决问题-问题是不理解DOM和ko表示形式需要如何交互来设置lazyloading。 我相信我需要更好地考虑创建一个knockout模型,该模型设置< code>imageTmp ,并根据是否在视口中响应lazyloading,然后在加载完
imageThumb (真正的图像)后更新该模型。