【问题标题】:Imagesloaded not working with Infinite Ajax Scroll and Masonry加载的图像不适用于 Infinite Ajax Scroll 和 Masonry
【发布时间】:2016-05-15 22:11:41
【问题描述】:

我有一个网站,它使用引导程序和我用砖石创建的新闻,我使用了 Infinite Ajax Scroll,它在不同的 div 中调用其他新闻,而不是预先默认的。然而,很多时候,如果一个人快速滚动页面,或者如果你的连接速度很慢,元素会重叠并且不会返回到它们的位置,我认为这是因为它无法加载图像。 我试图集成 Imagesloaded 但它似乎无法正常工作......而且我不知道该怎么做...... 这是我继续进行的来源, HTML:

<div class="row masonry_base altre">
  {$news}
</div>

<div class="row masonry altre">
  <div class="col-lg-4 col-md-6 col-xs-12 post-grid">
    {$news_scroll}
  </div>
</div>

JS:

<script>
(function($) {
"use strict";

  var $container = $('.masonry_base');
  $($container).imagesLoaded( function(){
    $($container).masonry({
      itemSelector: '.post-grid',
      columnWidth: '.post-grid'
    });
  });
})(jQuery);
</script>

<script type="text/javascript">
  var container = document.querySelector('.masonry');
  var msnry = new Masonry( container, {
    itemSelector: '.post-grid',
        gutterWidth: 20
  });
msnry.reloadItems()
    var $container = $('.masonry');
    $($container).imagesLoaded( function(){
        $($container).masonry({
            itemSelector: '.post-grid',
            columnWidth: '.grid',
            gutterWidth: 20
        });
    });


  var ias = $.ias({
    container: ".masonry",
    item: ".post-grid",
    pagination: "#pagination",
    next: ".next a",
    delay: 1200
  });

  ias.on('render', function(items) {
    $(items).css({ opacity: 0 });
  });

  ias.on('rendered', function(items) {
    msnry.appended(items);
  });

  ias.extension(new IASSpinnerExtension());
  ias.extension(new IASNoneLeftExtension({
        html: '<div class="btn btn-info btn-block btn-icon-left ias-noneleft" style="text-align:center"><p><em>No news</em></p></div>'
    }));
</script>

【问题讨论】:

    标签: javascript masonry imagesloaded


    【解决方案1】:

    这段代码:

    $($container).imagesLoaded( function(){
        $($container).masonry({
            itemSelector: '.post-grid',
            columnWidth: '.grid',
            gutterWidth: 20
        });
    });
    

    仅将imagesLoaded 应用于$container 恰好在其执行时。它不适用于动态添加的内容。您应该再次调用此函数来添加动态内容。也许在您的rendered 回调中。

    另外,在图片加载完成后,您只需调用msnry.layout()调整内容(无需再次调用$.masonry

    希望对你有帮助

    【讨论】:

    • 我是这样修改JS的,对吗? &lt;script&gt; (function($) { "use strict"; var $container = $('.masonry_base'); $($container).imagesLoaded( function(){ $($container).masonry({ itemSelector: '.post-grid', columnWidth: '.post-grid' }); }); })(jQuery); &lt;/script&gt; &lt;script type="text/javascript"&gt; var container = document.querySelector('.masonry'); var msnry = new Masonry( container, { itemSelector: '.post-grid', });
    • 问题应该仍然存在。尝试将 Infinite Ajax Scroll 回调更改为此 ias.on('rendered', function(items) { msnry.appended(items); msnry.layout(); });
    • 非常感谢您的帮助,不幸的是,如果我插入“msnry.layout();”正如您从i.imgur.com/HBULlAM.png 看到的那样,它给我带来了巨大的空白空间@
    • 从您的代码中很难判断。如果您有实时预览或 JSFiddle,我可以检查一下。
    • 已解决,是tpl的错误...谢谢帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多