当前位置: 首页 > 知识库问答 >
问题:

将图像延迟加载绑定到ajax请求后插入的新图像

龙亮
2023-03-14

我正在使用Mika Tuupola的延迟加载插件http://www.appelsiini.net/projects/lazyload 在向下滚动长图像库时延迟加载图像。问题是在10个图像之后,我使用无限滚动,所以我获取接下来的10个图像,并通过ajax附加它们。延迟加载不再适用于下一批附加图像。

这是一个相当重javascript的图像库,因此对于其他所有内容(如工具提示、模式覆盖等),我一直在使用jQuery的delegate()绑定到ajax插入的元素。延迟加载插件的问题是我不确定绑定到哪个事件。

假设我想用一个“lazy”类延迟加载图像。我将写下:

$("img.lazy").lazyload({ 
    effect: "fadeIn" 
});

它适用于前10个图像,但在通过ajax插入更多图像后停止工作。我唯一能想到的就是在加载事件上使用委托,如下所示:

$(document).delegate("img.lazy", "load", function(event) {  
    $(this).lazyload({ 
         effect: "fadeIn" 
    });     
});

但这破坏了一切。谢谢

编辑:我用来加载更多记录的jQuery(这是Rails应用程序):

$(window).scroll(function() {
    var url;
    url = $(".pagination .next_page").attr("href");
    if (url && $(window).scrollTop() > $(document).height() - $(window).height() - 50) {
    $(".pagination").html("<p>loading more images...</p>");
    return $.getScript(url);
    }
});

$(window).scroll();

共有2个答案

颜均
2023-03-14

除了Kevin B的答案,如果您想避免ajaxStopjQuery现在为此定义了一个when()函数

// the following code will be executed when the ajax request resolve.
// the ajax function must return the value from calling the $.ajax() method.

    $.when(load_new_image(1), load_new_image(2), load_new_image(3)).done(function(i1, i2, i3){

            if($('img.lazy').length){

                 $('img.lazy').lazyload({ 

                          effect:'fadeIn'

                 }).removeClass('lazy').addClass('lazyloaded');

            }

        });

        function load_new_image(image_id) {

            return $.ajax({
                url: "someUrl",
                dataType: "json",
                data:  yourJsonData,            
                ...
            });
        }

发件人:http://api.jquery.com/jQuery.when/

柯乐池
2023-03-14

我会使用ajaxStop方法。

$("img.lazy").lazyload({ 
    effect: "fadeIn" 
}).removeClass("lazy");
$(document).ajaxStop(function(){
    $("img.lazy").lazyload({ 
        effect: "fadeIn" 
    }).removeClass("lazy");
});

防止双重初始化。

 类似资料:
  • 问题内容: 我正在使用Mika Tuupola的“延迟加载”插件http://www.appelsiini.net/projects/lazyload,以在向下滚动长图像库时延迟加载图像。问题是在10张图像之后,我使用了无限滚动,所以我获取了接下来的10张图像,并通过ajax附加了它们。延迟加载不再适用于下一批附加图像。 这是一个非常漂亮的javascript图片库,因此对于其他所有内容(例如工具

  • 问题内容: 在我的应用程序中,我需要从URL下载很多图片并将其显示在gridView中。(可以在1-200张照片之间)。我不想一次下载所有图片。我读到了关于延迟下载的信息,我的问题是:我只能得到Json的一部分,以其他线程下载图片, 并且只有当用户向下滚动 gridView时,我才继续到Json的其他部分,并且等等吗? 编辑:再次嗨。我想在此gridView中实现多选,而我很难在适配器的getVi

  • 问题是:PageSpeedInsights说图像没有被延迟加载,留档说img标签应该被“data-page espeed-laily-src”属性替换(它没有这样做)。 pagespeed.conf: 超文本标记语言: 它正在转换png图像,我看到了“X-Mod-Pagespeed”标题,所以我确信模块在那里。 /pagespeed_admin显示“Lazyload Images”过滤器已启用。o

  • 我想做一个reactjs页面懒惰加载图像。因此,我调用lazyLoadImages()内部的组件didMount()。我发现位于浏览器选项卡的浏览器加载指示器仍然一路旋转,直到加载所有图像。这让我认为我所做的并没有提供真正的懒惰加载图像体验。 有趣的是,如果我在setTimeout中用一个不太短的timeout参数包装lazyLoadImages(),例如100ms(不是0或甚至50ms),那么页

  • 我正在使用Mika Tuupola的jQuery延迟加载。 是否可以在每次延迟加载图像后调用函数。 我打算做的是跟踪图像的浏览次数。因此,如果图像是延迟加载的,这意味着用户已经看到了图像,我将通过在后台执行HTTP GET,将数据库中的计数器增加1。

  • 问题内容: 我正在开发一个eshop。在基于类别的产品页面上,我放置了一些基于javascript的过滤器。但是,如果类别具有很多产品,则会出现问题。该链接具有与我相似的功能… 这个页面多么缓慢,却超过2mb !!! 对我来说,每个产品都需要一半的K字节,但是图像是个问题。.因此,我正在寻找如何延迟加载图像的方法。由于与该网站不同,我的页面具有分页功能,因此我认为加载仅对页面可见的图像是一种解决方