纯js实现瀑布流展现照片(自动适应窗口大小)


Posted in Javascript onApril 08, 2013

用瀑布流来展现照片再好不过了,下面是瀑布流(每一行的长度等于浏览器窗口的长度)的一种实现方式,也可以用css3实现,很简单,谷歌一下你就知道。

我的思路大概是一张一张的图片插入,当这一行的图片保持长宽比例不变并且高度低于250时就完成一个了循环,即这一行插入进去了。

然后进入下一个循环插入下一行。公式很简单,假设这一行当前的高度为h,则插入一张高和宽为(x,y)的图片时,满足下列关系:
h' * (w / h + y / x) = w
w是浏览器窗口的宽度,
则 h' = w / (w / h + y / x);

<html> 
<head> 
<style> 
img { 
border:1px dashed #000; 
display: inline-block; 
z-index:-1; 
-webkit-box-shadow: 10px -10px 8px rgba(0, 0, 0, 0.2); 
-moz-box-shadow: 10px -10px 8px rgba(0, 0, 0, 0.2); 
box-shadow: 10px -10px 8px rgba(0, 0, 0, 0.2); 
//-webkit-transform: rotate(2deg) translate(-14px,20px) skew(-20deg); 
//-moz-transform: rotate(2deg) translate(-14px,20px) skew(-20deg); 
//-o-transform: rotate(2deg) translate(-14px,20px) skew(-20deg); 
//transform: rotate(2deg) translate(-14px,20px) skew(-20deg); 
} 
</style> 
<script src="js/jquery.min.js"></script> 
</head> 
<body onload="display()"> 
<!--div id="title" style="position:absolute;width:300px;height:200px;background:red;"></div--> 
<script type="text/javascript"> 
window.onload=display; 
for (var i = 0; i < 34; ++ i) { 
var div = document.createElement('div'); 
div.setAttribute("id", "div_" + i.toString()); 
div.setAttribute("style", "position:absolute"); 
document.body.appendChild(div); 
} 
for (var i = 0; i < 34; ++ i) { 
var img = document.createElement('img'); 
img.setAttribute('src', '/images/' + 'psb_' + (i + 1).toString() + '.jpg'); 
document.getElementById("div_" + i.toString()).appendChild(img); 
} 
function display() { 
var col = 0; 
var row = document.body.clientWidth - 50; 
var H = 250; 
var h = 0; 
var w = 300; 
var jg = 20; 
var imgs = document.getElementsByTagName("img"); 
for (var i = 0; i < imgs.length; ++ i) { 
var flag = i; 
h = row / imgs[i].width * imgs[i].height; 
while (h > H && i < imgs.length - 1) { 
++ i; 
h = row / (row / h + (imgs[i].width + jg) / imgs[i].height); 
} 
w = 0; 
for (var j = flag; j <= i; ++ j) { 
imgs[j].parentNode.style.top = (col + jg).toString() + "px"; 
imgs[j].parentNode.style.left = (w + jg).toString() + "px"; 
imgs[j].style.height = h.toString() + "px"; 
w = w + h / imgs[j].height * imgs[j].width + jg; 
} 
col += h + jg; 
} 
/* 
var imgs = document.getElementsByTagName("img"); 
for (var i = 0; i < imgs.length; ++ i) { 
if (row + imgs[i].width > document.body.clientWidth + 100) { 
++ col; 
row = 0; 
} 
imgs[i].parentNode.style.top = (col * 250).toString() + "px"; 
imgs[i].parentNode.style.left = row.toString() + "px"; 
row += imgs[i].width + 10; 
} 
*/ 
} 
window.onresize=display; 
//$(window).resize(display); 
</script> 
</body> 
</html>
Javascript 相关文章推荐
JQUERY操作JSON实例代码
Feb 09 Javascript
导航跟随滚动条置顶移动示例代码
Sep 11 Javascript
页面实时更新时间的JS实例代码
Dec 18 Javascript
javascript常见数据验证插件大全
Aug 03 Javascript
浅谈JavaScript 浏览器对象
Jun 03 Javascript
深入理解vue.js中$watch的oldvalue与newValue
Aug 07 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 Javascript
vue实现直播间点赞飘心效果的示例代码
Sep 20 Javascript
原生JS利用transform实现banner的无限滚动示例代码
Jun 15 Javascript
纯JS开发baguetteBox.js响应式画廊插件
Jun 28 Javascript
vue使用screenfull插件实现全屏功能
Sep 17 Javascript
vue选项卡切换的实现案例
Apr 11 Vue.js
javascript中常用编程知识
Apr 08 #Javascript
利用webqq协议使用python登录qq发消息源码参考
Apr 08 #Javascript
setInterval,setTimeout与jquery混用的问题
Apr 08 #Javascript
JQueryEasyUI Layout布局框架的使用
Apr 08 #Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
Apr 08 #Javascript
JQueryEasyUI datagrid框架的基本使用
Apr 08 #Javascript
Jquery中使用setInterval和setTimeout的方法
Apr 08 #Javascript
You might like
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
Php图像处理类代码分享
2012/01/19 PHP
js类 from qq
2006/11/13 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
Python实现程序的单一实例用法分析
2015/06/03 Python
Python中的默认参数详解
2015/06/24 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
python爬取微信公众号文章的方法
2019/02/26 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
如何利用cmp命令比较文件
2016/04/11 面试题
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
工商管理本科毕业生求职信范文
2013/10/05 职场文书
在职人员函授期间自我评价分享
2013/11/08 职场文书
销售演讲稿范文
2014/01/08 职场文书
安全生产管理责任书
2014/04/16 职场文书
授权委托书样本
2014/09/25 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
防灾减灾标语
2014/10/07 职场文书
义诊活动总结
2015/02/04 职场文书
慰问信范文
2015/02/14 职场文书
运动会加油稿30字
2015/07/21 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
详解Python常用的魔法方法
2021/06/03 Python