繁体   English   中英

大量图像的延迟加载

[英]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());
        }
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM