具有大量图像的延迟加载
lazy load with large number of images
我有延迟加载图片的代码:
$.fn.isInViewport = function() {
var elementTop = $(this).offset().top;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
return elementBottom > viewportTop && elementTop < viewportBottom;
};
$(window).on('scroll', function() {
$('.imgli').each(function(){
if ($(this).isInViewport()) {
$(this).attr("src", $(this).attr("data-src")).removeAttr('data-src');
}
});
});
它适用于大约 700 张图像,但我很感兴趣 - 20.000 张图像(最多)怎么样?
有什么方法可以检查这个,而无需真正加载 20.000 张图像,因为我现在没有那么多图像。
每张图片最大约 100kb。
首先你可以随时复制你现有的图像,使它成为 20.000,虽然它有点毫无意义。
其次您可以在每次图片出现在视口中时强制重新加载它。
$(window).on('scroll', function() {
$('.imgli').each(function(){
if ($(this).isInViewport()) {
$(this).attr("src", $(this).attr("data-src") + "?" + $.now());
}
});
});
因此您只需滚动页面即可查看图片每次出现在视口中时的加载方式。
另外避免使用不必要的$(this)
。
更好的方法是将其保存到变量中。这样可以节省内存。
$(window).on('scroll', function() {
$('.imgli').each(function() {
var image = $(this);
if (image.isInViewport()) {
image.attr("src", image.attr("data-src") + "?" + $.now());
}
});
});
我有延迟加载图片的代码:
$.fn.isInViewport = function() {
var elementTop = $(this).offset().top;
var elementBottom = elementTop + $(this).outerHeight();
var viewportTop = $(window).scrollTop();
var viewportBottom = viewportTop + $(window).height();
return elementBottom > viewportTop && elementTop < viewportBottom;
};
$(window).on('scroll', function() {
$('.imgli').each(function(){
if ($(this).isInViewport()) {
$(this).attr("src", $(this).attr("data-src")).removeAttr('data-src');
}
});
});
它适用于大约 700 张图像,但我很感兴趣 - 20.000 张图像(最多)怎么样?
有什么方法可以检查这个,而无需真正加载 20.000 张图像,因为我现在没有那么多图像。
每张图片最大约 100kb。
首先你可以随时复制你现有的图像,使它成为 20.000,虽然它有点毫无意义。
其次您可以在每次图片出现在视口中时强制重新加载它。
$(window).on('scroll', function() {
$('.imgli').each(function(){
if ($(this).isInViewport()) {
$(this).attr("src", $(this).attr("data-src") + "?" + $.now());
}
});
});
因此您只需滚动页面即可查看图片每次出现在视口中时的加载方式。
另外避免使用不必要的$(this)
。
更好的方法是将其保存到变量中。这样可以节省内存。
$(window).on('scroll', function() {
$('.imgli').each(function() {
var image = $(this);
if (image.isInViewport()) {
image.attr("src", image.attr("data-src") + "?" + $.now());
}
});
});