我在一页中有多个同位素容器。我能够将带有ajax的新项目加载到每个容器中,但是当我尝试使用imagesLoaded插件加载图像后重新布局项目时,它只适用于最后一个容器。
一旦我通过ajax获取项目,我的代码如下:
//Get all the items
var $new_items = $($items).filter('.post-grid-item'),
slugs = {};
// check items and save slugs (containers ids)
$new_items.each(function(){
var sl =$(this).attr('data-slug');
slugs[sl] = '';
});
// loop for each unique id
for (var new_slug in slugs) {
// I insert the items into the isotope container
$('.posts-grid.'+new_slug).isotope('insert', $new_items.filter('[data-slug='+ new_slug +']') );
// I attached imagesloaded event to container to relayout once images are loaded
$('.posts-grid.'+new_slug).imagesLoaded( function() {
// Only runs on last container id - why?¿?¿
$('.posts-grid.'+new_slug).isotope('reLayout');
$('.posts-grid.'+new_slug).isotope('reloadItems');
});
}
似乎imagesLoaded只挂钩到最后一个容器,不知道为什么。我没有实时链接可以分享,抱歉
答案 0 :(得分:0)
再一次,在写下我在Stackoverflow中遇到的问题之后,以不同的视角看待它,我能够找到解决方案。
在加载所有同位素容器的所有图像后,我将调用它一次,而不是调用多个图像加载的实例。基本上我把事情转移到了:
//Get all the items
var $new_items = $($items).filter('.post-grid-item'),
slugs = {};
// check items and save slugs (containers ids)
$new_items.each(function(){
var sl =$(this).attr('data-slug');
slugs[sl] = '';
});
// loop for each unique id
for (var new_slug in slugs) {
// I insert the items into the isotope container
$('.posts-grid.'+new_slug).isotope('insert', $new_items.filter('[data-slug='+ new_slug +']') );
}
// All images in all isotopes containers are loaded
$('.container.section-content').imagesLoaded( function() {
//loop again in container and relayout
for (var new_slug in slugs) {
$('.posts-grid.'+new_slug).isotope('reLayout');
$('.posts-grid.'+new_slug).isotope('reloadItems');
}
});