使用Masonry来做瀑布流加载, 但是在ajax中不能够完成,求方法.希望能够ajax中也能够使用imagesloaded来实现加载图片完成之后进行排列.

2013-08-23 16:23:02 +08:00
 justfindu
我的代码
不会贴git代码 直接贴了

html:

<div class="container" id="wall">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
...
</div>

js:
var container = jQuery('#wall');
jQuery("#wall item").imagesLoaded(function(){
container.masonry({
gutter: 28,
itemSelector: '.item',
isAnimated: true
});
});

ajax:

jQuery.getJSON('http://localhost/test.json',function(data){
var tmp;
var l = data.length;
var h = '';
for(var i=0;i<l;i++){
tmp =data[i];
h += '<div class="item"><h5>'+tmp.title+'</h5><img src="'+tmp.image+'" alt=""></div>';
}
jQuery(h).imagesLoaded(function(){
jQuery('#wall').append(jQuery(h)).masonry('appended', jQuery(h), true);
});
})


在第一步加载js的时候是没有问题的,

关键是触发ajax之后添加到后面的DOM就不会再瀑布流式的排列了.

还有如果ajax改成如下

jQuery.getJSON('http://localhost/test.json',function(data){
var tmp;
var l = data.length;
var h = '';
for(var i=0;i<l;i++){
tmp =data[i];
h = '<div class="item"><h5>'+tmp.title+'</h5><img src="'+tmp.image+'" alt=""></div>';
jQuery(h).imagesLoaded(function(){
jQuery('#wall').append(h).masonry('appended', jQuery(h), true);
});
}
});

这样的情况就是只会增加最后一个DOM, 而且前面的会空出来.

求指教.

尝试过 其他 masonry的reloaditems , 这个效果就是把新增加DOM的坐标全部清空.
7583 次点击
所在节点    JavaScript
6 条回复
justfindu
2013-08-23 16:29:41 +08:00
是因为不贴git 所以没人看么- -
dexbol
2013-08-23 17:57:59 +08:00
@justfindu 应该是。
Gawie
2013-08-23 18:07:52 +08:00
没有配合infinitescroll 么
justfindu
2013-08-26 08:47:25 +08:00
@Gawie 没尝试~ 我看过示例~ 我是绑定按钮~ 跟Masonry示例上的~ 我去搞搞
ghbjy1128
2013-08-26 10:20:37 +08:00
如果没有不需要考虑IE8的话,使用naturalHeight and naturalWidth最方便
justfindu
2013-08-26 12:32:10 +08:00
@ghbjy1128 要是不考虑IE的话 这件事就变成简单多了~ 可是~ 哎~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/80009

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX