纯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与图片美化checkbox和radio控件的代码(打包下载)
Nov 11 Javascript
javascript 闭包
Sep 15 Javascript
用js代码改变单选框选中状态的简单实例
Dec 18 Javascript
node+express+ejs制作简单页面上手指南
Nov 26 Javascript
javascript实现在网页中运行本地程序的方法
Feb 03 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
Sep 13 Javascript
javascript html5轻松实现拖动功能
Mar 01 Javascript
Node.js使用gm拼装sprite图片
Jul 04 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
Jul 11 Javascript
基于Vue生产环境部署详解
Sep 15 Javascript
vue自定义树状结构图的实现方法
Oct 18 Javascript
JavaScript的function函数详细介绍
Nov 20 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程序的多种方法介绍
2014/11/06 PHP
php递归json类实例
2014/12/02 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
Layui选项卡制作历史浏览记录的方法
2019/09/28 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
python实现KNN分类算法
2019/10/16 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
北京华建集团SQL面试题
2014/06/03 面试题
化工专业个人的求职信范文
2013/11/28 职场文书
会计与审计毕业生自荐信范文
2013/12/30 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
公司晚会主持词
2019/04/17 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python