在 JQuery Mobile 中实现瀑布流图库布局

先来看在Windows系统的1080P显示器中显示的效果:

这个整合方式几乎没有现存的实例,是自己总结出来的方法,在此记录下来。

首先访问Masonry官网下载masonry.pkgd.min.jshttp://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: 0;
}

主要就是控制了区块间距,并模拟了圆角照片效果,呈现效果如下:

至此你就能得到一个漂亮的瀑布流图库页面了。

但是有一个问题,如果你在页面切换时使用的 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手机屏幕上的显示效果:

时间: 2024-07-31 10:35:57

在 JQuery Mobile 中实现瀑布流图库布局的相关文章

安卓中的瀑布流

过年没回家,宅在家里看了很多博客,顺手写一下自己的一些收货.. android中的瀑布流的实现原理,来自郭大神的CSDN 转载注明出处http://blog.csdn.net/guolin_blog/article/details/10470797 实现原理:瀑布流的布局方式虽然看起来好像排列的很随意,其实它是有很科学的排列规则的.整个界面会根据屏幕的宽度划分成等宽的若干列,由于手机的屏幕不是很大,这里我们就分成三列.每当需要添加一张图片时,会将这张图片的宽度压缩成和列一样宽,再按照同样的压缩比

jquery mobile中显示加载中提示框和关闭提示框

在jquery mobile开发中,经常需要调用ajax方法,异步获取数据,如果异步获取数据方法由于网速等等的原因,会有一个反应时间,如果能在点击按钮后数据处理期间,给一个正在加载的提示,客户体验会更好一些. 先看两个方法,显示和关闭,方法来自于参考:http://blog.csdn.net/zht666/article/details/8563025 <script> //显示加载器 function showLoader() { //显示加载器.for jQuery Mobile 1.2.

仿jquery mobile中的select控件效果

不说废话,直接上代码,最好将on.png和off.png也使用jquery mobile里的图片 //仿jQuery mobile Select控件 //用法box为容器id,_id指控件id,selectvalue为选中值,Value为当前值 function SelectBox(box,_id,selectvalue,Value) { if(Value != selectvalue) { $("#" + box).html("<input type=hidden v

jQuery Mobile中jQuery.mobile.changePage方法使用详解

jQuery.mobile.changePage方法用的还是很多的.作为一个老手,有必要对jQuery mobile中实用方法做一些总结.系列文章请看jQuery Mobile专栏.jquery.mobile.changepage是过时的jQuery Mobile 1.4.0及将被删除在1.5.0.使用pagecontainer部件的change()法代替. 注意该方法是在内部使用的页面加载和转换作为一个结果,点击一个链接或提交表单时.跳转外部页面全部没有效果,必须是内部的DIV页面才有效果.

风行一时瀑布流网页布局,实现无限加载(jquery)

今天跟大家分享一个瀑布流网页布局,先跟大家分析下实现的思路吧 主要思路:一.根据屏幕宽度和单个浮动层的宽度来确定浮动层列数 var $boxs = $("#main>div") var boxw = $boxs.eq(0).outerWidth(); var clos = Math.floor($(window).width()/boxw); $("#main").width(boxw*clos).css('margin','0 auto'); 二.用绝对定位

瀑布流式布局

今天终于搞懂了瀑布流式布局,哈哈,总结下 瀑布流式布局分为两种类型:1.每一列都限定宽度不限定高度的布局(使用浮动)2.宽度不是写死的,是根据页面的放大缩小变化的(定位布局) 瀑布流式布局的重点是:每个新加载的模块都应该显示在原有模块高度最小的下方 注意事项: 图片:接收到的数据在插入到文档的过程中,可能会因为图片的加载速度影响Li的最小高度,可以等图片加载完触发某个事件,再继续加载图片(还未研究出):可以设置图片的相对宽高; 什么时候鼠标滚动的时候继续加载数据:当最小高度的模块显示在文档可视区

网站布局--瀑布流式布局

瀑布流式布局简介 现在越来越流行一种瀑布流式布局的页面布局方式,希望你没有对这个名字陌生,看张图相信你就知道它是什么了. 怎么样,是不是很熟悉,越来越多的网站采用这种布局,比如 Pinterest (貌似是最早使用这种布局的网站了),Mark之,蘑菇街,点点网,哇哦等等. 瀑布式流式布局,这个名字是很形象的,这种布局适合于小数据块,每个数据块内容相近且没有侧重.通常,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.这种布局可以说是扩展了原始的格子布局,给用户更加自由,灵活的感

JS瀑布流效果-布局

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>JS瀑布流效果-布局</title> <style> * { margin: 0px; padding: 0px; } #container { position: relative; } .box { padding: 5px; float: left; } .box_img {

利用jQuery来扩展一个瀑布流插件

  简单了解jQuery.fn.extend() jQuery.fn.extend()函数用于为jQuery扩展一个或多个实例属性和方法(主要用于扩展方法). (截图来自jQuery文档) 为了更清晰的理解我将需求写成了注释 扩展代码如下 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 1 (function($){ 2 3 $.fn.WaterFall = function () { 4 5 /* 6 * 瀑布流插件 7 * 容器的宽度固定 8