代码之家  ›  专栏  ›  技术社区  ›  Xanger

加载的图像无法使用Infinite Ajax Scroll和Masonry

  •  0
  • Xanger  · 技术社区  · 9 年前

    我有一个使用bootstrap和我用mastry创建的新闻的网站,我使用了Infinite Ajax Scroll,它调用不同div中的其他新闻,而不是pre-default。然而,通常情况下,如果快速滚动页面,或者连接速度较慢,元素会重叠,不会返回到它们的位置,我认为这是因为它无法加载图像。 我试图整合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>
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   Javier Enríquez    9 年前

    此代码:

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

    仅适用于 imagesLoaded 无论是什么 $container 碰巧正在执行。它不适用于动态添加的内容。您应该对添加的动态内容再次调用此函数。也许在你的 rendered 回调。

    另外,你应该打电话给 msnry.layout() 加载图像后调整内容(无需调用 $.masonry 再次)

    希望能有所帮助