谈起Wookmark我想做过前端的大侠都不会觉得陌生,它就是远近闻名的流布局jQuery插件,这个插件使用起来非常简单,需要引入两个js:

1.<script src="/js/jquery-1.10.2.min.js"></script>
2.<script src="js/jquery.wookmark.min.js"></script>

因为Wookmark是基于jQuery编写的插件,自然是少不了jQuery.js文件且必须在wookmark.js之前已入,否则将会报错。

接着就是html内图片容器的布局讲究了:

1、容器需要指定positionrelative相对位置;

2、必须指定图片的高度宽度

示例代码如下所示:

01.<div class="example">
02.<div id="main" role="main">
03.<ul id="tiles">
04.<!-- These are our grid blocks -->
05.<li><img src="img/image_1.jpg" width="200" height="283"><p>1</p></li>
06.<li><img src="img/image_2.jpg" width="200" height="300"><p>2</p></li>
07.<li><img src="img/image_3.jpg" width="200" height="252"><p>3</p></li>
08.<li><img src="img/image_4.jpg" width="200" height="158"><p>4</p></li>
09.<li><img src="img/image_5.jpg" width="200" height="300"><p>5</p></li>
10.<li><img src="img/image_6.jpg" width="200" height="297"><p>6</p></li>
11.<li><img src="img/image_7.jpg" width="200" height="200"><p>7</p></li>
12.<li><img src="img/image_8.jpg" width="200" height="200"><p>8</p></li>
13.<li><img src="img/image_9.jpg" width="200" height="398"><p>9</p></li>
14.<li><img src="img/image_10.jpg" width="200" height="267"><p>10</p></li>
15.<li><img src="img/image_1.jpg" width="200" height="283"><p>11</p></li>
16.<li><img src="img/image_2.jpg" width="200" height="300"><p>12</p></li>
17.<li><img src="img/image_3.jpg" width="200" height="252"><p>13</p></li>
18.<li><img src="img/image_4.jpg" width="200" height="158"><p>14</p></li>
19.<li><img src="img/image_5.jpg" width="200" height="300"><p>15</p></li>
20.<li><img src="img/image_6.jpg" width="200" height="297"><p>16</p></li>
21.<li><img src="img/image_7.jpg" width="200" height="200"><p>17</p></li>
22.<li><img src="img/image_8.jpg" width="200" height="200"><p>18</p></li>
23.<li><img src="img/image_9.jpg" width="200" height="398"><p>19</p></li>
24.<li><img src="img/image_10.jpg" width="200" height="267"><p>20</p></li>
25.<li><img src="img/image_1.jpg" width="200" height="283"><p>21</p></li>
26.<li><img src="img/image_2.jpg" width="200" height="300"><p>22</p></li>
27.<li><img src="img/image_3.jpg" width="200" height="252"><p>23</p></li>
28.<li><img src="img/image_4.jpg" width="200" height="158"><p>24</p></li>
29.<li><img src="img/image_5.jpg" width="200" height="300"><p>25</p></li>
30.<li><img src="img/image_6.jpg" width="200" height="297"><p>26</p></li>
31.<li><img src="img/image_7.jpg" width="200" height="200"><p>27</p></li>
32.<li><img src="img/image_8.jpg" width="200" height="200"><p>28</p></li>
33.<li><img src="img/image_9.jpg" width="200" height="398"><p>29</p></li>
34.<li><img src="img/image_10.jpg" width="200" height="267"><p>30</p></li>
35.<!-- End of grid blocks -->
36.</ul>
37.</div>
38.</div>

接着就是当所有页面元素渲染完毕过后调用流布局的方法,如下所示:

01.(function ($){
02.var handler = $('#tiles li');
03. 
04.handler.wookmark({
05.// Prepare layout options.
06.autoResize: true// This will auto-update the layout when the browser window is resized.
07.container: $('#main'), // Optional, used for some extra CSS styling
08.offset: 5, // Optional, the distance between grid items
09.outerOffset: 10, // Optional, the distance to the containers border
10.itemWidth: 210 // Optional, the width of a grid item
11.});
12. 
13.// Capture clicks on grid items.
14.handler.click(function(){
15.// Randomize the height of the clicked item.
16.var newHeight = $('img'this).height() + Math.round(Math.random() * 300 + 30);
17.$(this).css('height', newHeight+'px');
18. 
19.// Update the layout.
20.handler.wookmark();
21.});
22.})(jQuery);

只要一句:wookmark()即可调用流布局,插件会自动根据容器内图图片容器的大小个数计算每一个容器的绝对位置(top、left)值和width和height值,从而达到每一张图片非常完美地呈现出来,且成一种水流一样的均匀垂直分布。

问题暴露:

1、当我们的站点访问资源速度很慢的情况下,你会发现最终呈现出来的流布局会有一些瑕疵,也就是尾部有一些图片容器发生了相互重叠的现象。

问题分析:

1、问题根源在于图片资源请求过慢,倒是插件无法获得图片的准确height和width值,从而导致了计算其position为absolute的情况下的top值不够准确,最后出现了图片相互重叠的情况。这个时候,让你改变窗体大小的情况下重新去调用一下wookmark() 将会发现重新的布局非常完美。因为这个时候图资源已经全部获取到了的。

问题解决办法:

1、既然是图片资源尚未完全加载的情况下出现的问题,那么我们就何不等待所有图片资源都加载完毕过后在执行流布局呢?

这个时候我们想到了jQuery的另外一个插件jquery.imagesloaded

这个插件就是用于等待和监听页面内所有图片资源全部加载完毕,我们可以直接这样下载这个插件的js:http://code.ciaoca.com/jquery/wookmark/demo/js/jquery.imagesloaded.js

这个js文件需要引入在jQuery之后wookmark之前

1.<script src="/js/jquery-1.10.2.min.js"></script>
2.<script src="js/jquery.imagesloaded.js"></script>
3.<script src="js/jquery.wookmark.min.js"></script>

接着我们就是调用imagesloaded监听加载完毕过后的状态然后调用流布局,代码如下所示:

01.(function ($) {
02.var loadedImages = 0, // Counter for loaded images
03.handler = $('#tiles li'); // Get a reference to your grid items.
04. 
05.// Prepare layout options.
06.var options = {
07.autoResize: true// This will auto-update the layout when the browser window is resized.
08.container: $('#main'), // Optional, used for some extra CSS styling
09.offset: 5, // Optional, the distance between grid items
10.outerOffset: 10, // Optional, the distance to the containers border
11.itemWidth: 210 // Optional, the width of a grid item
12.};
13. 
14.$('#tiles').imagesLoaded(function(){
15.// Call the layout function.
16.handler.wookmark(options);
17. 
18.// Capture clicks on grid items.
19.handler.click(function(){
20.// Randomize the height of the clicked item.
21.var newHeight = $('img'this).height() + Math.round(Math.random() * 300 + 30);
22.$(this).css('height', newHeight+'px');
23. 
24.// Update the layout.
25.handler.wookmark();
26.});
27.}).progress(function(instance, image) {
28.// Update progress bar after each image load
29.loadedImages++;
30.if (loadedImages == handler.length)
31.$('.progress-bar').hide();
32.else
33.$('.progress-bar').width((loadedImages / handler.length * 100) + '%');
34.});
35.})(jQuery);

imagesLoaded(function(){}); 这样就表示图片资源全部加载完毕的状态监听了的。

这样一来,我们就彻底解决了流布局当图片资源请求过慢导致图片相互重叠的问题了的。

转:jQuery插件之Wookmark:流布局插件遇到图片资源请求过慢导致最终计算图片绝对位置top不够准确发生图片重叠的解决方案的更多相关文章

  1. myWaterfall - jQuery瀑布流布局插件

    myWaterfall - jQuery瀑布流布局插件 Demo http://jsfiddle.net/q3011893/p5k2ogy8/embedded/result,html,css,js/ ...

  2. Waterfall———瀑布流布局插件, 类似于 Pinterest、花瓣、发现啦。

    瀑布流布局插件, 类似于 Pinterest.花瓣.发现啦. En 中文 文档 下载 下载waterfall插件最新版本. 使用 html: <div id="container&qu ...

  3. 响应式流布局插件DyLay

    jQuery插件-Dylay,流布局我们前面介绍过很多,但这个流布局jQuery插件不同的是它的动画效果很不错,大家可以尝试使用下.另外<有用的jQuery布局插件推荐>这篇文章中有好几个 ...

  4. jquery validate表单验证插件-推荐

    1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家.     1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素  3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...

  5. 轻量级jQuery语法高亮代码高亮插件jQuery Litelighter。

    <!DOCTYPE html><html><head><meta charset="UTF-8" /><title>jQ ...

  6. 20款jQuery 的音频和视频插件

    分享 20 款jQuery的音频和视频插件 Blueimp Gallery: DEMO || DOWNLOAD Blueimp gallery 主要为移动设备而设计,同时也支持桌面浏览器.可定制视频和 ...

  7. jQuery模仿人类打字效果插件typetype

    typetype是一款模仿人类打字效果的jQuery插件,typetype非常轻巧,文件不到2K,gzipped压缩后只有578字节,但模仿的效果非常逼真,一字一字的顿出和回删效果,让人惊叹不止,喜欢 ...

  8. jQuery插件 -- 动态事件绑定插件jquery.livequery.js

    http://blog.csdn.net/zzq58157383/article/details/7721974 动态事件绑定插件livequery, 可以利用它给相应的DOM元素注册事件或者触发回调 ...

  9. jquery validate表单验证插件

    1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家.     1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素  3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...

随机推荐

  1. Linux下验证码无法显示,Could not initialize class sun.awt.X1 解决方案

    环境:Oracle Linux 6.4,JDK1.6,Weblogic11g 在通过java.awt生成图片验证码时,提示: Could not initialize class sun.awt.X1 ...

  2. 《React-Native系列》44、基于多个TextInput的键盘遮挡处理方案优化

    曾经写过两篇关于在ReactNative上处理键盘遮挡输入表单TextInput的情况.建议读者能够先看看 1.<React-Native系列>33. 键盘遮挡问题处理 2.<Rea ...

  3. Wrong FS: hdfs://xxx/xxx expected: file:///

    Eclipse调用HDFS API上传文件时出现了如下错误: Exception in thread "main" java.lang.IllegalArgumentExcepti ...

  4. Table折叠小技巧html-demo

    1.要做一个table折叠的展示文本框直接上代码 html: <!DOCTYPE html> <html> <head> <title>table-折叠 ...

  5. SSM实战——秒杀系统之Service层接口设计与实现、Spring托管、声明式事务

    一:Service层接口设计 准备工作:新建三个包:service包.exception包.dto包,分别用来存放业务接口.自定义异常类.dto类. 1:定义接口 package org.myseck ...

  6. 用pyenv和virtualenv搭建单机多版本python虚拟开发环境

    作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...

  7. Spring Remoting: Hessian

  8. oracle11g-R2静默安装报错[INS-32013]解决方案

    问题描述: oracle静默安装很强大...,参数搞不对.安装就扯dan了....这个报错搞了一个下午.终于搞定了如释负重.... 如果当初选择仅仅安装oracle软件就没多事情.想一步完成(数据库软 ...

  9. JavaScript 风格指南

    来源于: https://github.com/alivebao/clean-code-js 目录 介绍 变量 函数 对象和数据结构 类 测试 并发 错误处理 格式化 注释 介绍 作者根据 Rober ...

  10. 不让复制是不可能的----js获取选中文字

    在360百科.知乎上经常会遇见禁止复制文本的情形,这能挡住一部分人复制,却挡不住程序员的复制. HTML都给我了,难道一小段文本我都拿不下来吗? F12打开控制台,然后选中文本,在控制台下粘贴以下代码 ...