在愚人码头的博客上看到有关于如何构建pinterest网站的文章,其实就是“图片瀑布流显示”,我试着在本地作了一个,没有什么问题,可是放到公司的网站上就问题多多。一是定位不许确,二是图片显示不完整。可是从新改变下窗口大小,显示和位置都正常了,这说明第一次加载的时候,算的值不许,第一想到这个是加载顺序的问题。想了个土方法,在body里加了onload,确实解决了第一次加载页面显示的问题,点击显示更多图片的时候,出来的效果仍是算错的,最后的解决办法是给每一个图片加上宽高,由于图片都是从后来截取的,宽高都有数据。这个库的应用能够参照码头的:点击css
而后我再本身写了一个根据屏幕宽度一行最多显示图片(web响应)且页面居中的脚本。demo点击这(改变你的窗口大小观察自适应看效果)html
宽屏显示:web
窄屏显示:浏览器
由上图对比能够看到,中间部分始终居中,可是会根据屏幕的大小判断一行最多显示多少张图片。让框架居中有多种方法,最多见的是添加 margin:0 auto;框架
由于咱们要让整个屏幕显示至多张图,因此我只要求得屏幕至多能放下多少个图片后,剩下的数平均分给左右外边距,这样即能居中,例如:margin:10px autoide
html代码:网站
<div class="container" style="margin:0 auto;">
<div class="aside"></div>
<div class="photo_box">
<div class="photo_img"><img src="1.jpg" alt="" width="" height="" /></div>
<div class="photo_img"><img src="2.jpg" alt="" width="" height="" /></div>
</div>
...
</div>
js代码:spa
$(document).ready($onresize = function(){ var Winh = $(window).width(), Wimg = $(".photo_img").width() + 38, Wsidebar = $(".aside").width() + 24; var mainWidth = Winh - Wsidebar; var imgBs = mainWidth % Wimg; //imgBs为最多放下图片后剩下的余数 var a = Math.floor( imgBs / 2); //余数平分即为外边距大小 $(".container").css("margin-left", a ); $(".container").css("margin-right", a ); }) $(window).bind("resize", $onresize);
ps:有一个很重要的问题,必须给html强制滚动条,不然,在某些显示器下,会出现切边的效果,实际上是由于开始算屏幕宽度的时候,滚动条还没加载出来,宽度会算多一点,这样,这样左右的外边距大于实际边距,就发生了切边的效果。像这样:html{ overflow:scroll; }rest
这个想法就像是小时候作的数学题,一块多大面积的蛋糕,切成每份多大,最多能分给多少人,这里只是加了一个居中的条件。而后当浏览器改变大小的时候,也会从新加载一次,算一次。而图片的位移会使用Masonry.js这个库的动态效果,整个过程很流畅,若是网速不限制,显示的效果是很是好的。orm
再狠狠的点击这个看这个效果吧:demo点击这