纯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 相关文章推荐
再论Javascript下字符串连接的性能
Mar 05 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
Nov 14 Javascript
jQuery跨域问题解决方案
Aug 03 Javascript
Highcharts使用简例及异步动态读取数据
Dec 30 Javascript
ES6新特征数字、数组、字符串
Oct 01 Javascript
让你彻底掌握es6 Promise的八段代码
Jul 26 Javascript
基于iScroll实现内容滚动效果
Mar 21 Javascript
支付宝小程序tabbar底部导航
Nov 06 Javascript
js序列化和反序列化的使用讲解
Jan 19 Javascript
JavaScript动态创建二维数组的方法示例
Feb 01 Javascript
微信小程序如何播放腾讯视频的实现
Sep 20 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 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支付宝手机网页支付类实例
2015/03/04 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
JavaScript 对象、函数和继承
2009/07/07 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
用实例分析Python中method的参数传递过程
2015/04/02 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
python监控键盘输入实例代码
2018/02/09 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
什么是Assembly(程序集)
2014/09/14 面试题
清洁工岗位职责
2014/01/29 职场文书
办理收楼委托书范本
2014/10/09 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2015大学迎新晚会策划书
2015/07/16 职场文书
感恩父母主题班会
2015/08/12 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
Node.js实现断点续传
2021/06/23 Javascript