单击ajax加载更多按钮时,不会重新加载砌体项目

时间:2015-03-05 09:59:24

标签: javascript jquery css ajax masonry

大家好,我对砌筑物有一个问题。

我已经从 codepen.io

创建了 DEMO

在这个演示中,你可以看到有这个javascript代码:

$(window).load(function()
{
$( function() {
var $container = $('.posts-holder');
    $container.masonry({
      isFitWidth: true,
      itemSelector: '.kesif-gonderi-alani'
    });

});
});

我打开一个页面时只显示10个帖子。如果用户想要显示其他10个帖子,则用户需要单击(显示更多按钮)。我创建了这个ajax函数来显示更多帖子。

$('.showmore').live("click",function(event) 
{
event.preventDefault();
var ID = $(this).attr("id");
var P_ID = $(this).attr("rel");
var URL=$.base_url+'diger_fotograflar_ajax.php';
var dataString = "lastid="+ ID+"&profile_id="+P_ID;

if(ID)
{
$.ajax({
type: "POST",
url: URL,
data: dataString, 
cache: false,
beforeSend: function(){ $("#more"+ID).html('<img src="wall_icons/ajaxloader.gif" />'); },
success: function(html){
$("div.posts-holder").append(html).each(function(){
   $('.posts-holder').masonry('reloadItems');
 });
$("#more"+ID).remove();
}
});
}
else
{
$("#more").html('The End');// no results

}

return false;
});

此代码在点击showmore按钮$('.posts-holder').masonry('reloadItems');但在一个地方收集新帖子时有效。但是当我改变页面的宽度时,一切都在改善。

enter image description here

2 个答案:

答案 0 :(得分:8)

我认为您可以在添加元素后使用$container.masonry();,如下所示:

$("div.posts-holder").append(html).each(function(){
    $('.posts-holder').masonry('reloadItems');
});

$container.masonry();

您可以看到它正常工作here

希望可以提供帮助。

答案 1 :(得分:1)

你必须使用附加的砌体方法......否则你怎么知道你添加了任何新元素。

添加元素根本不会将它们对齐,因为砌体没有添加新元素的任何事件列表器。

  var el = $('<div class="kesif-gonderi-alani" style="height:300px;"></div>') 
  $container.masonry().append( el ).masonry( 'appended',el );  

她是codepen http://codepen.io/knaman2609/pen/xbJMRY

上的小型演示

点击按钮动态追加元素

http://masonry.desandro.com/methods.html