ajax后如何应用砌体
How to apply masonry after ajax
点击 "BuddyPress" 的 "Activity Page" 中的 "Load More" 后,我想将 "Masonry.js" 应用到 activity 列表。
我为此编写了以下代码,但是 $ grid.masonry
在单击 "Load More" 后不起作用。
(function($){
if($('#activity-stream').length){
var observer = new MutationObserver(function (MutationRecords, MutationObserver) {
var $grid = $('.grid').masonry({
itemSelector: '.grid-item',
isFitWidth: true,
isAnimated: true,
columnWidth: 620,
});
$grid.masonry(); // don't work
$grid.masonry('reloadItems'); // don't work
$grid.masonry('layout'); // don't work
});
observer.observe($('#activity-stream').get(0), {
childList: true,
});
}
})(jQuery);
如果我添加 span
等元素并使用 settimeout
,如下所示,"Masonry.js" 将起作用,但这是不合适的。
(function($){
if($('#activity-stream').length){
$('body').on("click",'.load-more',function(){
$('#activity-stream').prepend('<span></span>');
});
var observer = new MutationObserver(function (MutationRecords, MutationObserver) {
var $grid = $('.grid').masonry({
itemSelector: '.grid-item',
isFitWidth: true,
isAnimated: true,
columnWidth: 620,
});
setTimeout(function(){
$grid.masonry();
$grid.masonry('reloadItems');
$grid.masonry('layout');
},5000);
});
observer.observe($('#activity-stream').get(0), {
childList: true,
});
}
})(jQuery);
我完全迷失在生活中,不知道该怎么办...
如能详细说明,将不胜感激。
谢谢。
Masonry.js:https://github.com/desandro/masonry
- 当您完成添加到 DOM 的元素后(可能使用 AJAX 调用),然后在您的 Masonry 实例上调用
.layout()
方法。不要多次初始化 Mansory,并在文档就绪事件中进行。参见 https://masonry.desandro.com/methods.html
- 如果你可以 post 页面,HTML 也许我可以符合我的要求
答案,这取决于使用的 Wordpress 主题。
- Observer的定义应该是可以的
在 AJAX 调用后执行,因此未检测到突变
点击 "BuddyPress" 的 "Activity Page" 中的 "Load More" 后,我想将 "Masonry.js" 应用到 activity 列表。
我为此编写了以下代码,但是 $ grid.masonry
在单击 "Load More" 后不起作用。
(function($){
if($('#activity-stream').length){
var observer = new MutationObserver(function (MutationRecords, MutationObserver) {
var $grid = $('.grid').masonry({
itemSelector: '.grid-item',
isFitWidth: true,
isAnimated: true,
columnWidth: 620,
});
$grid.masonry(); // don't work
$grid.masonry('reloadItems'); // don't work
$grid.masonry('layout'); // don't work
});
observer.observe($('#activity-stream').get(0), {
childList: true,
});
}
})(jQuery);
如果我添加 span
等元素并使用 settimeout
,如下所示,"Masonry.js" 将起作用,但这是不合适的。
(function($){
if($('#activity-stream').length){
$('body').on("click",'.load-more',function(){
$('#activity-stream').prepend('<span></span>');
});
var observer = new MutationObserver(function (MutationRecords, MutationObserver) {
var $grid = $('.grid').masonry({
itemSelector: '.grid-item',
isFitWidth: true,
isAnimated: true,
columnWidth: 620,
});
setTimeout(function(){
$grid.masonry();
$grid.masonry('reloadItems');
$grid.masonry('layout');
},5000);
});
observer.observe($('#activity-stream').get(0), {
childList: true,
});
}
})(jQuery);
我完全迷失在生活中,不知道该怎么办...
如能详细说明,将不胜感激。
谢谢。
Masonry.js:https://github.com/desandro/masonry
- 当您完成添加到 DOM 的元素后(可能使用 AJAX 调用),然后在您的 Masonry 实例上调用
.layout()
方法。不要多次初始化 Mansory,并在文档就绪事件中进行。参见 https://masonry.desandro.com/methods.html - 如果你可以 post 页面,HTML 也许我可以符合我的要求 答案,这取决于使用的 Wordpress 主题。
- Observer的定义应该是可以的 在 AJAX 调用后执行,因此未检测到突变