2013-05-瀑布流效果的制作

这个图片墙是动态瀑布流,思路是:

1.动态计算用户视窗的宽度,计算出可显示多少列的图片;

2.监听滚动条的变化,动态算出滚动时最短的是哪一列,当最短列底部露出后,用$.getJSON()方法获取新的一批图片,并遍历每一个图片,将新图片添加到最短列中(这时最短列是动态的啦)。

3.监听视窗大小变化,动态算出窗口的新宽度值,重新对图片进行排列,并使用了动画效果。

核心代码也有点长,就不贴出来了,直接看源码呗,我写满了注释O(∩_∩)O~ Demo

//—2013-05-09-优化————————————————————————————————————————————

上面这个Demo,有一个细节,就是图片原始大小,是json文件里定义好的,即原图片大小本地计算好后写在json里,调用时直接使用了jData.width和jData.height属性,可我这样就没有灵活性了。

合理的思路是这样的:json只存储图片路径,然后使用JS去获取图片的原始尺寸进行等比例缩放。

查阅资料后确实JS发现有Image()对象,可以获得图片的原始尺寸:

[javascript]
var objImg = new Image();// 新建Image对象,获得原始图片的尺寸,增大了灵活性
objImg.onload = function() {
var iHeight = objImg .height * (iWidth / objImg .width); // iWidth恒定,使用原图片尺寸计算并设置等比例缩放后的图片高度</p>
}
[/javascript]

需要注意的是,这些计算需要放在onload函数中,保证计算时,图片已经加载完成,否则会得到iHeight为0。

可直接看源码,找到修改的地方理解,Demo2