学习 Ryan 的视频,还有网上搜集的一些关于 masonry 的一些帖子,在逐步学习做瀑布流,但是遇到一个问题,想请教一下,谢谢。 图片已经实现了异步上传,但是新上传的文件并没有遵照已有的样式:
刷新之后:
继续上传,就会藏在最后面了。
请问这个应该怎么处理呢?让新上传的图片能够遵从样式
http://masonry.desandro.com/methods.html
用 appended 或者 layout 方法。注意如果用图片需要图片加载完再重排,不然高度会是错误的。可以找个 jquery onload 的插件
@doitian 我试了不过不行。。。 在app/views/photos/create.js.erb原来的代码是这样,点击上传图片,无需刷新直接显示,只是样式不对,没有加在后面
app/views/photos/create.js.erb
$("#masonry").append("<%= j render(@photo) %>");
改为
$("#masonry").masonry('appended', '<%= j render(@photo) %>');
上传图片没显示,要刷新才行,用错方法了吗?我 JS 知道的不多。。。谢谢
你要传给 DOM collection,这样 masonry 才能对上号。如果 j render(@photo) 返回的只有一个根结点可以用 $ 先转成 DOM
j render(@photo)
$
el = $("<%= j render(@photo) %>"); $('#masonary').append(el); $('#masonary').masonary('appended', el);
如果不只一个根结点,可以用个临时的 div
div
el = $(document.createElement('div')).html("<%= j render(@photo) %>").children(); ...
@doitian 参照你的提示,我试了很久没有搞定。。。二十分钟后,发现原来你代码里打错了一词masonary,不过改完就搞定啦!谢谢!图片上传的位置算是正确了,不过到某个特定的地方的时候,添加就会叠加: 请问知道这个怎么解决吗?是 masonary 自身的问题吗?因为我拉宽一下再缩小一下浏览器页面又正常了。不用刷新。
masonary
@doitian 我大概知道了,需要用到其他插件,否则高度不正确对吧