纯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 相关文章推荐
详解Wondows下Node.js使用MongoDB的环境配置
Mar 01 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
Apr 17 Javascript
JS验证逗号隔开可以是中文字母数字
Apr 22 Javascript
javascript运算符——位运算符全面介绍
Jul 14 Javascript
用jquery快速解决IE输入框不能输入的问题
Oct 04 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
VueRouter导航守卫用法详解
Dec 25 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
Apr 13 Javascript
vue element upload实现图片本地预览
Aug 20 Javascript
JavaScript键盘事件响应顺序详解
Sep 30 Javascript
koa2 数据api中间件设计模型的实现方法
Jul 13 Javascript
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 md5下16位和32位的实现代码
2008/04/09 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
js null,undefined,字符串小结
2010/08/21 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
js style动态设置table高度
2014/10/21 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
2016/04/06 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
2016/08/17 Javascript
js以及jquery实现手风琴效果
2020/04/17 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
用python 制作图片转pdf工具
2015/01/30 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
如何基于python实现脚本加密
2019/12/28 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
PHP中如何使用Cookie
2015/10/28 面试题
运动会广播稿300字
2014/01/10 职场文书
保护环境的建议书
2014/03/12 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
中小学生学籍证明
2014/10/25 职场文书
父亲节活动总结
2015/02/12 职场文书
高一军训口号
2015/12/25 职场文书
Django程序的优化技巧
2021/04/29 Python
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技