在 JQuery Mobile 中实现瀑布流图库布局
先来看在Windows系统的1080P显示器中显示的效果:

这个整合方式几乎没有现存的实例,是自己总结出来的方法,在此记录下来。
首先访问Masonry官网下载masonry.pkgd.min.js:http://masonry.desandro.com/
将其整合到项目中,在页面中引入。
初始化id变量,让页面每次加载时的id都不同,避免 Ajax 加载时id重复造成难以察觉的错误。
var id = "gallerycontent" + Guid.NewGuid();
采用HTML初始化方式进行初始化:
<div id="@id" style="margin: 50px auto;" class="js-masonry" data-masonry-options='{ "isFitWidth": true, "itemSelector": ".post" }'>
....
....
....
</div>
以上为外部容器代码。id属性使用前面的变量;style属性和后面的isFitWidth选项共同实现了容器自动水平方向居中功能;我没有像Masonry入门教程那样指定列宽选项,我觉得貌似对我的项目没什么用,通过css盒模型即可较好地控制图片区块的列宽和间距。
内部图片区块的伪代码:
<div class="post" style="height:@(260/1.0/image1.宽度*image1.高度)px">
<a data-ajax="true" href="@image1.大图地址">
<img src="@image1.小图地址" width="260" />
</a>
</div> <div class="post" style="height:@(260/1.0/image2.宽度*image2.高度)px">
<a data-ajax="true" href="@image2.大图地址">
<img src="@image2.小图地址" width="260" />
</a>
</div> .... .... ....
class对应初始化选项里的itemSelector选项;源图片尺寸是不规则的,将img的width强制设为260,这样图片的高度会自动等比变化;经我测试,想要正常显示就必须明确设置每个区块的高度,由于几乎不做前端开发,对于普通页面我真不知道怎么获取源图像的尺寸,好在我的项目中图像的尺寸都在上传时一并记录到数据库中了,这里只要获取其尺寸并进行简单的等比缩放运算,并写到style属性中就行了。
css文件中post类的定义:
.post {
margin: 10px;
padding: 5px;
border: solid;
border-width: 2px;
border-color: #e4e4e4;
-webkit-border-radius:5px;
-moz-border-radius:5px;
}
.post img {
border:;
}
主要就是控制了区块间距,并模拟了圆角照片效果,呈现效果如下:

至此你就能得到一个漂亮的瀑布流图库页面了。
但是有一个问题,如果你在页面切换时使用的 JQuery Mobile 的整页 Ajax 功能,即将超链接标记的属性设为“data-ajax="true"”,那么在 Ajax 加载后的页面是不会应用瀑布流效果的。
为了解决这一问题,我做了不少测试,最终确定了这样一个方法:
<script type="text/javascript">
$(document).on("pagechange", function (event) {
$("#@id").masonry({
itemSelector: ".post",
isFitWidth: true
});
});
</script>
在瀑布流容器的底下加入上面这个JS代码块,让其随着 Ajax 加载而执行,以注册pagechange事件,并在事件发生时再初始化瀑布流效果。
pagechange事件是我测试得出的最佳应用时机,过早应用瀑布流效果的话,页面布局还没有完成,无法正确获取页面宽度,会导致瀑布流变成一列垂直排下。
但是pagechange事件发生的确实比较晚,Ajax 加载时我们会清楚地看到图片区块先是按没有布局修饰的形象显示出来,然后又变成我们所需要的瀑布流效果,这是非常糟糕的,为此我们对内嵌的JS代码做出这样的调整:
$("#@id").fadeTo(0, 0);
$(document).on("pagechange", function (event) {
$("#@id").masonry({
itemSelector: ".post",
isFitWidth: true
});
$("#@id").fadeTo(0, 1);
});
也就是在加载时先将其不透明度设为0,在应用了瀑布流之后再将其设回100%,这样看起来就完全没问题了。
至此全部完成。
此瀑布流布局会随着窗口尺寸变化而随时改变,在不同尺寸的设备上都有较优的布局呈现。
以下是在同为1080P分辨率的10寸Android平板上的显示效果:

以下是在近1080P分辨率(1800*1080)的5寸Android手机屏幕上的显示效果:

在 JQuery Mobile 中实现瀑布流图库布局的更多相关文章
- jquery.mobile 中 collapsible-set collapsible listview 共同布局问题
最近项目用上了jquery.mobile这货,在手机上做点简单的显示.之前只知道有这个框架,没把玩过. 特别是事件绑定方面,相比桌面系统下浏览器用着各种不爽,不得要领. 如下图,在做后台系统时,一般左 ...
- 用 jQuery Masonry 插件创建瀑布流式的页面(转)
瀑布流式的页面,最早我是在国外的一个叫 Pinterest 的网站上看到,这个网站爆发,后来国内的很多网站也使用了这种瀑布流方式来展示页面(我不太喜欢瀑布流这个名字). 我们可以使用 jQuery 的 ...
- 用 jQuery Masonry 插件创建瀑布流式的页面
瀑布流式的页面,最早我是在国外的一个叫 Pinterest 的网站上看到,这个网站爆发,后来国内的很多网站也使用了这种瀑布流方式来展示页面(我不太喜欢瀑布流这个名字). 我们可以使用 jQuery 的 ...
- JQuery mobile中按钮自定义属性的改变
1..ui-mobile-viewport是jquery mobile默认给body加的class,这样的话包含选择符优先级高一点 <style> .ui-mobile-viewport ...
- jQuery Mobile 中创建按钮
在 jQuery Mobile 中创建按钮 jQuery Mobile 中的按钮可通过三种方法创建: 使用 <button> 元素 使用 <input> 元素 使用 data- ...
- 【初探移动前端开发04】jQuery Mobile (中)
前言 昨天我们一起学习了一部分jquery mobile的知识,今天我们继续. 这些是些很基础的东西,有朋友觉得这个没有其它的好,但是学习下不吃亏嘛,我反正也不会一起学习基础啦. 例子请使用手机查看哦 ...
- jQuery Mobile (中)
jQuery Mobile (中) 前言 昨天我们一起学习了一部分jquery mobile的知识,今天我们继续. 这些是些很基础的东西,有朋友觉得这个没有其它的好,但是学习下不吃亏嘛,我反正也不会一 ...
- jQuery Mobile中的页面加载与跳转机制
第一次做用jQuery Mobile做东西,发现一些跟平时的思维习惯不太一样的.其中这个框架的页面加载机制便是其中一个.如果不明白其中的奥秘,往往会出现一些让人摸不着头脑的怪现象,比如页面进入后点击按 ...
- jQuery Mobile中jQuery.mobile.changePage方法使用详解
jQuery.mobile.changePage方法用的还是很多的.作为一个老手,有必要对jQuery mobile中实用方法做一些总结.系列文章请看jQuery Mobile专栏.jquery.mo ...
随机推荐
- python模块之subprocess
可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen* --废弃 popen2.* --废弃 commands.* ...
- jenkins:通过execute shell启动的进程会被杀死的问题
[问题]在jenkins中配置自动更新部署项目时,如果采取用execute shell启动/关闭tomcat,会发现可以进行关闭tomcat,但是无法启动tomcat,虽然构建会显示执行成功,但是查看 ...
- Lucene的分析过程
转自:http://www.open-open.com/lib/view/open1348033848724.html Lucene的分析过程 回顾倒排索引的构建 收集待建索引的原文档(Documen ...
- STL迭代器之一:偏特化
在stl的算法中运用容器的迭代器时,很可能经常会用到迭代器相应型别(例如迭代器所指物的型别),假设算法中有必要声明一个变量,以"迭代器所指对象的型别"为类型,如何是好,例如我们写一 ...
- VS2008下,aspx页面设计模式消失,只有黑白字体
版权声明:本文为博主原创文章,未经博主允许不得转载. RT,在工具选项里面重新设定的时候,报错,说一部分文件无法安装. 寻找一晚上,终于有了解决方案,供以后参考. luanwey(大陆响尾蛇)(不做温 ...
- formValidator表单验证示例
<script type="text/javascript">$(document).ready(function(){ $.formValidator.initCon ...
- tracert与pathping
trace route(windows命令为tracert,Linux命令为traceroute)命令可以列出本地计算机与目标计算机之间所有经过的计算机信息.可以输入目标计算机的名字(如www.bai ...
- 编程模式之装饰模式(Decorator)
装饰模式由四个角色组成:抽象组件角色,抽象装饰者角色,具体组件角色,具体装饰者角色. 抽象组件角色:给出一个抽象接口,以规范"准备接受附加功能"的对象. 抽象装饰者角色:持有一个组 ...
- jQuery iframe之间相互调用
,子iframe内调用父类函数方法: window.parent.func(); ,子Iframe中获取父界面的元素: $("#xx", window.parent.documen ...
- cookie 和session 的区别
假如我填好了淘宝的用户名密码,点击登录,浏览器客户端像服务器端发送请求,这时服务器端看这个用户是第一次登陆,session会让客户端这个浏览器生成个cookie,并给cookie一个session i ...