纯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 相关文章推荐
在浏览器中获取当前执行的脚本文件名的代码
Jul 19 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
Jan 29 Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 Javascript
js焦点文字滚动效果代码分享
Aug 25 Javascript
CSS3 media queries结合jQuery实现响应式导航
Sep 30 Javascript
react中的ajax封装实例详解
Oct 17 Javascript
关于ES6箭头函数中的this问题
Feb 27 Javascript
iconfont的三种使用方式详解
Aug 05 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
Sep 07 Javascript
详解vue-property-decorator使用手册
Jul 29 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
Aug 23 Javascript
解决新建一个vue项目过程中遇到的问题
Oct 22 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 开发环境配置(测试开发环境)
2010/04/28 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
浅析php单例模式
2014/11/25 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
node.js中的buffer.Buffer.isEncoding方法使用说明
2014/12/14 Javascript
JSON取值前判断
2014/12/23 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
Tensorflow 多线程设置方式
2020/02/06 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
商务英语毕业生自荐信范文
2013/11/08 职场文书
回门宴答谢词
2014/01/13 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
乔迁新居祝福语
2019/11/04 职场文书
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB