js实现把图片用瀑布流显示,只需要“jquery-1.11.2.min.js”。

js:

//
//瀑布流显示图片
var WaterfallImg = {
option: {
maxWidth: 850,//每一行固定的总的宽度
ifBeyond: 1,//加载到最后一张图超出范围时,参数值 0:超出一定范围(beyondMaxWidth)时使用1、没有超过时使用2 。 1:当前行张数减1放大。2:或不变张数缩小
beyondMaxWidth: 100,//最后一张图超出最大范围
//frameWidth: 200,//相框初始宽度(暂未实现固定行高)
frameHeight: 200,//相框初始高度
rightPadding: 0,//边距 ()
imgs: [], //图片集合[{url:"http://img1.youzy.cn/content/media/thumbs/p00174603.jpeg",FrWidth:554,FrHeight:418}] 。url :这个属性名,使用urlKey参数的值。 FrWidth 相框宽度。FrHeight 相框高度。相框宽高不传时,使用图片原始尺寸
urlKey: "url",//图片在obj中的 路径字段属性名称 },
result: {
rightPadding: 0,
rows: [{ row: 1, RowHeight: 0, imgs: [] }],//[{row:1,RowHeight:60,imgs:[{url:"",FrWidth:50,obj:{}}]}] row:行。RowHeight:当前行高度。 imgs:当前行要放置的图片.obj 传入参数中的完整对象
html: ""
},
//调用方法
executionShow: function (inputOption, back) {
WaterfallImg.option = $.extend(WaterfallImg.option, inputOption);
//先确定所有图宽高 //未加载的图片执行加载
for (var i = 0; i < WaterfallImg.option.imgs.length; i++) {
WaterfallImg._setImgOldWH(WaterfallImg.option.imgs[i]);
} window.onload = function () {
for (var i = 0; i < WaterfallImg.option.imgs.length; i++) {
//使用url获取图片 宽高
WaterfallImg.option.imgs[i] = WaterfallImg._setImgOldWH(WaterfallImg.option.imgs[i]); //
if (WaterfallImg.option.rightPadding > 0) { WaterfallImg.option.imgs[i].FrWidth = WaterfallImg.option.imgs[i].FrWidth + WaterfallImg.option.rightPadding;
} }
//执行瀑布流计算
WaterfallImg._executionShow(WaterfallImg.option); //开始回调
if (back) {
back(WaterfallImg.result);
}
}; },
//执行瀑布流显示
_executionShow: function (inputOption) {
//执行瀑布流显示 WaterfallImg.result.rightPadding = WaterfallImg.option.rightPadding;
var result = WaterfallImg.result;
var NowWidth = WaterfallImg.option.maxWidth;//当前行剩余宽度
var row = 1;// 当前行
//遍历所有图
for (var i = 0; i < WaterfallImg.option.imgs.length; i++) { var NewWidth = WaterfallImg._getWidht(WaterfallImg.option.imgs[i]);//当前相框新宽度
//按比例计算出的新宽度 超过最大限制,当前图单独一行
if (NewWidth > WaterfallImg.option.maxWidth) {
if (i != 0) {
//上一行空白补足
var NewHeight = WaterfallImg._getRowHeight(WaterfallImg.option.maxWidth - NowWidth);
result.rows[row - 1].RowHeight = NewHeight;
//换行
row++;
result.rows.push({ row: row, imgs: [] });
NowWidth = WaterfallImg.option.maxWidth;
}
//当前图单独一行
result.rows[row - 1].imgs.push({
url: WaterfallImg.option.imgs[i].url,
FrWidth: WaterfallImg.option.maxWidth,
obj: WaterfallImg.option.imgs[i]
});
result.rows[row - 1].RowHeight = WaterfallImg._getRowHeight(NewWidth); //换行
if (i < WaterfallImg.option.imgs.length - 1) {
row++;
result.rows.push({ row: row, imgs: [] });
}
continue;
} //超出剩余宽度
if (NewWidth > NowWidth) {
//换行 //超过时采用换行放大行策略,或者ifBeyond==0时并 超过超出范围
if (WaterfallImg.option.ifBeyond == 1 || (WaterfallImg.option.ifBeyond == 0 && NewWidth - NowWidth > WaterfallImg.option.beyondMaxWidth)) {
//根据剩余空白宽度,放大当前行,得到高度 var NewHeight = WaterfallImg._getRowHeight(WaterfallImg.option.maxWidth - NowWidth);
result.rows[row - 1].RowHeight = NewHeight; //当前图 换到下一行
i--;
//换行
row++;
result.rows.push({ row: row, imgs: [] });
NowWidth = WaterfallImg.option.maxWidth;
continue;
} else {
//当前图作为当前行的最后一张图
result.rows[row - 1].imgs.push({
url: WaterfallImg.option.imgs[i].url,
FrWidth: NewWidth,
obj: WaterfallImg.option.imgs[i]
});
//根据超出宽度,缩小当前行,得到高度 var NewHeight = WaterfallImg._getRowHeight(WaterfallImg.option.maxWidth + NewWidth - NowWidth);
result.rows[row - 1].RowHeight = NewHeight; //换行
row++;
result.rows.push({ row: row, imgs: [] });
NowWidth = WaterfallImg.option.maxWidth;
} } else {
//宽度没有超出 仍在当前行 result.rows[row - 1].imgs.push({
url: WaterfallImg.option.imgs[i].url,
FrWidth: NewWidth,
obj: WaterfallImg.option.imgs[i]
});
NowWidth = NowWidth - NewWidth; //最后一个
if (i >= WaterfallImg.option.imgs.length - 1) {
result.rows[row - 1].RowHeight = WaterfallImg.option.frameHeight;
}
}
} //根据高缩放比例 设置每一个单独图的宽度
result.rows = WaterfallImg._setImgWidth(result.rows); //设置显示的html
result.html = WaterfallImg._setHtml(result.rows); WaterfallImg.result = result; return WaterfallImg.result;
},
_getWidht: function (img) {
//当前相框在当前高度上对应的宽度
img.FrWidth = (WaterfallImg.option.frameHeight / img.FrHeight) * img.FrWidth;
img.FrHeight = WaterfallImg.option.frameHeight;
return img.FrWidth;
},
_getHeight: function (img) {
//相框宽度超过行的最大宽度,固定相框宽度,计算高度 
img.FrHeight = (WaterfallImg.option.maxWidth / img.FrWidth) * img.FrHeight;
img.FrWidth = WaterfallImg.option.maxWidth;
return img.FrHeight;
},
_getRowHeight: function (RowWidth) {
//根据宽度比例 获取行的新高度
return (WaterfallImg.option.maxWidth / RowWidth) * WaterfallImg.option.frameHeight;
},
_setImgWidth: function (rows) {
//根据高缩放比例 设置每一个单独图的宽度
for (var i = 0; i < rows.length; i++) {
var proportion = rows[i].RowHeight / WaterfallImg.option.frameHeight;
for (var j = 0; j < rows[i].imgs.length; j++) {
rows[i].imgs[j].FrWidth = rows[i].imgs[j].FrWidth * proportion - WaterfallImg.option.rightPadding;
}
}
return rows;
},
_setHtml: function (rows) {
//设置显示的html
var html = ""; return html;
},
_isSetImgOldWH: false,//是否要设置图片原始高度
_setImgOldWH: function (img) { //根据url得到图片原始高度宽度
var imgobj = new Image();
imgobj.src = img[WaterfallImg.option.urlKey];
if (!imgobj.complete) {
WaterfallImg._isSetImgOldWH = true;
imgobj.style.display = 'none';
document.body.appendChild(imgobj);
///只有在加载之后才能得到 window.onload
}
//文档已加载,可以直接获取
if (imgobj.naturalWidth > 0 || imgobj.naturalHeigh > 0) {
img.FrWidth = imgobj.naturalWidth;
img.FrHeight = imgobj.naturalHeight;
}
//(未实现边距)
return img;
}
}

html:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script src="jquery-1.11.2.min.js" type="text/javascript"></script>
<script src="js瀑布流显示图片20180315.js" type="text/javascript"></script>
<script>
$(function () {
var images=[
{url:"https://test2015data.oss-cn-hangzhou.aliyuncs.com/image-hroot/year20173/image-201730/news/file_170328203053104559.png"}
,{url:"https://test2015data.oss-cn-hangzhou.aliyuncs.com/image-hroot/year20173/image-201730/news/file_170328203053104559.png"}
,{url:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1490965812249&di=7ec87be2d7b63733a7bba492e952202e&imgtype=0&src=http%3A%2F%2Fwww.shuhua365.com%2Fhualang%2Fuploadfile%2F2010312112959216.jpg"}
,{url:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1490965812249&di=7ec87be2d7b63733a7bba492e952202e&imgtype=0&src=http%3A%2F%2Fwww.shuhua365.com%2Fhualang%2Fuploadfile%2F2010312112959216.jpg"}
,{url:"http://photocdn.sohu.com/20170328/Img485277054.jpg"}
,{url:"http://photocdn.sohu.com/20170328/Img485277054.jpg"}
,{url:"https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=512897042,748871735&fm=80&w=179&h=119&img.JPEG"}]
WaterfallImg.executionShow({
maxWidth: 850,//每一行固定的总的宽度
frameHeight: 200,//相框初始高度
rightPadding: 0,//边距
imgs: images,
urlKey: "url"
}, function (result) {
console.log(result);
var $imgs=$("div[name='imgs']");
$.each(result.rows,function(i,n){
if(i%2==0)
$imgs.append('<div name="row_'+(i+1)+'" style="background-color:black">');
else
$imgs.append('<div name="row_'+(i+1)+'">');
$imgs.append('</div>'); $.each(n.imgs,function(j,img){
$('div[name="row_'+(i+1)+'"]').append('<img style="width:'+img.FrWidth+'px; height:'+n.RowHeight+'px;" src="'+img.obj.url+'">');
}); });
});
});
</script>
</head>
<body>
<div name="imgs" style="width:850px"></div>
</body>
</html>

【js】【图片瀑布流】js瀑布流显示图片20180315的更多相关文章

  1. python将图片转换为Framebuffer裸数据格式(终端显示图片)

    要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口,直接写入像素信息即可. 但普通的图片带有头部信息或者编码格式不同,直接送入Framebuffer是显 ...

  2. python将图片转换为Framebuffer裸数据格式(终端显示图片)【转】

    转自:https://www.cnblogs.com/zqb-all/p/6107905.html 要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口, ...

  3. PHP JS JQ 异步上传并立即显示图片

    提交页面: <! DOCTYPE html> < html> < head> < meta charset ="GB2312" > ...

  4. 关于ajaxfileupload.js一些问题和上传图片就立即显示图片功能

    ajaxfileupload.js是上传文件的一个插件,最近碰到的一个问题是在谷歌浏览器上传文件之后,原文本框中的文件名称消失,网上搜了好长时间也没有十分满意的答案.无刷新上传文件我想到的只有ajax ...

  5. IE浏览器中图片路径正确< img ... />标签不显示图片

    如下图所示,下面的html要去加载上面的jpg图片: 代码如下: <img src="luzhanshi1.jpg" alt="图片加载失败"> 使 ...

  6. [Android] 给图像加入相框、圆形圆角显示图片、图像合成知识

        前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放.移动.绘制和加入水印,继续我的"随手拍"项目完毕给图片加入相框.圆形圆角显示图片和图像合 ...

  7. Extjs显示图片

    1.首先做一个容器 xtype : 'container', // 第2行 anchor : '100%', layout : 'column', items : [{ columnWidth : 0 ...

  8. jquery 显示图片

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  9. IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

    编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...

随机推荐

  1. Python使用DDA算法和中点Bresenham算法画直线

    title: "Python使用DDA算法和中点Bresenham算法画直线" date: 2018-06-11T19:28:02+08:00 tags: ["图形学&q ...

  2. Aes CBC加密

    <?php namespace app\components; use yii; class Aes { /** * This was AES-128 / CBC / PKCS5Padding ...

  3. angular 4 实战开发--安卓兼容问题(1)

    首先我强调下我只是个菜鸟,大神不喜勿喷. 先介绍下项目背景,主要是公司的官网h5 ,架构用的是angular4 有点大材小用的赶脚,but ,公司要求. 在项目主功能做的差不多了.交给测试,这时候发现 ...

  4. Caravel–一款开源OLAP+数据可视化分析前端工具,支持Druid和Kylin

    参考此文:http://lxw1234.com/archives/2016/06/681.htm

  5. springmvc 配置之 mvc:default-servlet-handler

    配置dispatchServlet的方法一般是: <servlet> <servlet-name>mvc-servlet</servlet-name> <se ...

  6. ARP抓包实战小结-TCP/IP协议学习

    2011-12-26 21:36:47 图1 一,环境说明 硬件连线.PC与2440开发板直接用网线连接. PC的ip地址:192.168.0.107.2440开发板的ip地址:192.168.0.1 ...

  7. 原创《如何用vue来轻松的驾驭 html5 webapp的页面体验》

    由于最近开始要做mobile的webapp 项目,所以利用周末的时间思考了下页面的体验问题,我主要参考了"微信"的页面体验,总结主要有2个页面切换效果(点击进入页面效果 和 返回上 ...

  8. 16: mint-ui移动端

    1.1 mint-ui安装与介绍  官网:http://mint-ui.github.io/docs/#/zh-cn2/loadmore 1.安装与引用 // 安装Vue 2.0 npm instal ...

  9. Oracle 12c 单实例安装

    准备工作 实验环境:Redhat 6.6   Oracle 12c 12.2.0.1 1.官网下载 https://www.oracle.com/technetwork/database/enterp ...

  10. Tomcat类加载

    一.为什么会有类加载 1.在类加载阶段,虚拟机需要完成以下3件事情 1)通过一个全限类定名来获取此类的二进制字节流 2) 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 3)在内存中生成 ...