vue实现瀑布流

955 阅读2分钟

本文中所采用的纯css实现瀑布流的效果并不是很好分析如下(个人见解,可能会有错误,请见谅):

1.如果要实现下拉加载更多功能的话就不能用视频(www.bilibili.com/video/BV1xa…) 中的第二种方法。虽然第二种方法可以实现图像的横向排序(第一行显示序号为0~n),但是需要固定距离,我觉得用这个方法的话有所限制,也可能我理解不够,见谅哈。

2.过要实现图片的横向排序的话,就不能用视频(www.bilibili.com/video/BV1xa…) 中的第一种方法,因为第一种方法图像时纵向排序的(第一列为0 ~ n,第二列为n+1~2n,......)。这样对之后上传新的图片不是很友好,因为新的始终是在第一列或者最后一列,按常理来讲,新图片应该是放在第一行最好。 最后我采用的是js实现瀑布流(这玩意确实是顶级折磨)。参考链接为"segmentfault.com/a/119000001…" (这个很重要)。

中心思想: 1.预先设定好要多少列(这里是更具我自己需求来的)

2.排列第一行,动态设置每个盒子的left就可以排列好3.排列好第一行后,获取第一行盒子的高度,并且存到一个数组arr中,因为第二行的排列只需要考虑top值(这里可以适当加一个值,让上下两张图片有间隙)4.排列第二行,以此类推。详细的可以看那位作者的文章(上面的连接),里面的说明更加具体。5.在mounted中进行监听,以便随着窗口的改变,里面的item也跟着改变。

我用的是vue2,据说是要避免直接操作dom(我也还没遇到直接操作导致的bug),我用的是ref来操作的,相关代码贴图如下(我自己写的网站还不知道怎么实现贴代码,且不打乱格式,见谅哈)

实验结果

pubuliu_jieguo2.jpg

pubuliu_jieguo.jpg

html部分

pubuliu_html.jpg

css部分

pubuliu_css.jpg js部分

pubuliu_js0.jpg

pubuliu_js3.jpg

pubuliu_js2.jpg

pubuliu_js1.jpg