在ajax加载后,砌筑加载为1列

时间:2011-10-20 01:17:42

标签: jquery ajax jquery-masonry

我正在为我的投资组合项目使用砖石。当我直接进入页面时,它会将瓷砖加载到适当的列中。但是,我的网站是使用pjax加载的,当我加载投资组合页面时,所有的组合项目都会加载到一个列中,直到我调整窗口大小。

它像砌体一样,在ajax请求之后不知道客户端的宽度,然后在调整窗口大小时将其弹出。

任何人都有砌砖经验,知道我在经历什么?

2 个答案:

答案 0 :(得分:0)

将您的砌体调用包装在ajaxComplete中,以便在加载ajax后触发。

$( document ).ajaxComplete(function() {
  console.log("Ajax finished"); //remove this if you want, useful for debugging
      $(document).ready(function() {
      $('#content').masonry({
       columnWidth: 260, //change this accordingly
       itemSelector: '.item'
      });
    });
});

我自己也在努力解决这个问题。

更好的解决方案:

$(document).ready(function() {
      $('#admin_content').masonry({
       columnWidth: 260,
       itemSelector: '.masonry-item',
       isAnimated:true,
                animationOptions: {
                    duration: 500,
                    easing:'swing',
                    queue :false
               }
      });
    });
$( document ).ajaxComplete(function() {
    $('#admin_content').masonry('reloadItems').masonry();
});

答案 1 :(得分:0)

试试这个

$(window).load(function(){
var $container = $('#image_gallery');
$container.masonry({
    columnWidth: 230,
    itemSelector: '.brick'
});

$.ajax({
    url: 'url',
    type: 'post',
    success:function(response){
        response = JSON.parse(response);
        if(response.thumbs && response.thumbs.length > 0){
            $.each(response.thumbs, function(i, img){
                var eleHeight = (img.theight/img.twidth)*220;
                item += '<div class="brick" style="height:'+eleHeight+'px;width:220px"><a href="#">';
                item += '<img src="' + img.thumbUrl + '" /></a></div>';
    });
    }
    var $boxHtml = $(item);
        $container.append($boxHtml).masonry('appended', $boxHtml, true);
    }
});
});

服务器端json输出:
{    大拇指:[{         你的:250         thumbUrl:“/ uploads / early / image.jpg”         twidth:167.1875      }] }

注意:调整columnWidth属性以匹配brick div的宽度。 (例如,如果brick div有左边的填充和右边5px,那么总宽度是220 + 10,即上面代码中的230px)