【问题标题】:How to make Iscroll and Lazy Load jQuery plugins work together?如何让 Iscroll 和 Lazy Load jQuery 插件一起工作?
【发布时间】:2012-08-12 18:32:31
【问题描述】:

有没有机会让这两个插件一起工作? 现在,如果我在带有图像的 div 中使用 iscroll,则延迟加载不会检测到图像何时应该可见。

谢谢。

编辑:

正如其中一个 cmets 所说,我尝试像这样在滚动上应用延迟加载:

onScrollMove: function () {
    $("img").lazyload();
    $('img').on('load',function(){myScroll.refresh();});
}

为了正常工作,我想我必须将同样的方法应用于 onBeforeScrollEnd:

onBeforeScrollEnd: function () {
    $("img").lazyload();
    $('img').on('load',function(){myScroll.refresh();});
}

但是这种解决方案是否会影响性能(因为它会不断地对所有图像应用延迟加载,并在加载它们以重新适应加载的图像宽度/高度时刷新)? 我真的很关心这里的性能,因为我将在所有带有图像的主题中拥有一个带有几个(比如说 30 个)滚动条的容器滚动条。 我还能做什么?

编辑 2:

这是我目前所拥有的,我认为效果几乎不错:

onScrollMove: function() {
    $('#my_container img').lazyload({
        container: $('#my_container'),
        threshold: 200
    }).on('load', function() {
        myScroll.refresh();
    });​
}

但是这个方案的问题是,当myScroll第一次刷新时,lazyload会加载所有的图片..

这是一个小提琴:http://jsfiddle.net/U3gYS/

它还有一个问题,如果从一开始就可以看到第一张图像,那么延迟加载将不会加载该图像。 http://jsfiddle.net/U3gYS/1/

编辑 3:

http://jsfiddle.net/pdakD/我快搞定了,请大家帮忙。 在新的小提琴中,问题是:

  1. onBeforeScrollEnd 似乎不起作用。如果我在其中包含一个 console.log('something'),它在我看来就像滚动开始时正在触发一样。

  2. 初始#container 的高度为跨度+第一个img。为了让它看起来更好,我添加了一个 padding-bottom(不是太大)并在最后一张图片最终加载时将其移除...我还能做什么?

编辑 4:

这看起来更好:http://jsfiddle.net/pdakD/1/ .onBeforeScrollEnd Stills 对我来说看起来很糟糕。 我也有这个选项:http://jsfiddle.net/pdakD/1/ 适用

checkDOMChanges:true

但由于我有多个 iscrollers 和 ajax 数据等,我认为这不是一个好主意。

解决方案: 这是 Michael Alexander Freund 提出的解决方案的精髓。 http://jsfiddle.net/pdakD/11/ 它可以工作,但如果你快速“滚动”,它会卡在底部。

【问题讨论】:

    标签: jquery image scroll lazy-loading conflict


    【解决方案1】:

    今天我遇到了同样的问题,我发现滚动事件没有被触发,这是lazyload 正在监听的。因此,您唯一需要做的就是手动触发滚动容器的滚动事件。我使用了来自 iScroll 的 onScrollEnd 回调并做了一个

    onScrollEnd: function () {
        $('div.scroll').trigger('scroll');
    }
    

    $('div.scroll') 是我与 iScroll 一起使用的容器

    var scroll, container;
    
    container = $('div.scroll');
    scroll    = new iScroll(container.get(0), {
        bounce: false,
        onScrollEnd: function () {
            container.trigger('scroll');
        }
    });
    

    这就是lazyload方法的样子

    $('img.lazyload').lazyload({
        effect: 'fadeIn',
        container: $('div.scroll')
    });
    

    干杯!

    【讨论】:

    • 这太完美了,非常感谢!当每个图像完成加载时,我还向 iscroll 添加了刷新,因此 iscroll 知道新的高度。
    • 很棒的答案,感谢您提交您的发现。 FWIW,这也适用于 jScroll(iScroll 的 jQuery 插件)teamddm.com/articles/jscroll-an-iscroll-plugin-for-jquery
    【解决方案2】:

    这可能不是最好的解决方案,但因为没有其他人回答:

    尝试在 iscroll 的 onScrollEnd 事件中调用lazyload 方法。像这样的:

     new iScroll('wrapper', onScrollEnd: function() {$("img.lazy").lazyload()});
    

    【讨论】:

    • 感谢您的回答。我还尝试在滚动移动时调用它并刷新滚动条以正确适应新加载的图像高度。在 scrollmove 上调用它会影响性能吗? onScrollMove: function () {$("img").lazyload(); $('img').on('load',function(){myScroll.refresh();});
    猜你喜欢
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多