Wookmark jQuery插件大致使用position:absolute来重构内容实现瀑布流布局!

下载插件后,在网页中引用插件的JS文件:

<script src="jquery-1.8.2.min.js"></script>
<script src="jquery.wookmark.min.js"></script>

HTML代码结构:

<div id="main">
    <ul id="tiles">
        <li><img src="images/1.jpg"></li>
        <li><img src="images/2.jpg"></li>
        <li><img src="images/3.jpg"></li>
    </ul>
</div>

简单用法:在html文件中添加代码

<script>
    jQuery(function($){
        $('#tiles li').wookmark();
    });
</script>

复杂一点的用法:

<script>
jQuery(function($){
    $('#tiles li').wookmark({ //这里是要实现瀑布流布局的对象
        autoResize: true, //设置成true表示当window窗口大小改变的时候,重新布局
        container: $('#container'), //这个是容器名称 这个容器要必须包含一个css属性"position:relative" 否则你就会看到全部挤在页面的左上角了
        offset: 12, //2个相邻元素之间的间距
        itemWidth: 222, //指定对象的宽度
        resizeDelay: 50 //这是延时效果 默认是50
    });
});
</script>

wookmark同样也可以配合ajax来实现动态加载数据,不过新增之后需要重新执行一次。

var handler = $('#tiles li');
handler.wookmark(options);

如果你在前面已经绑定了事件,在重新执行之前,先清楚一下。

handler.wookmarkClear();

看到比较多人在问滚动加载是怎么用的,弄个实例补充说明下:

var handler = null;
//定义基本属性.
var options = {
    autoResize: true,
    container: $('#main'),
    offset: 2,
    itemWidth: 210
};
 
//定义滚动函数
function onScroll(event) {
    //是否到底部(这里是判断离底部还有100px开始载入数据).
    var closeToBottom = ($(window).scrollTop() + $(window).height() > $(document).height() - 100);
    if(closeToBottom) {
        //这里就是AJAX载入的数据
        $.ajax({url:"data.html", dataType:"html", success:function(html){
            //把新数据追加到对象中
            $('#waterfall').append(html);
            //清除原来的定位
            if(handler) handler.wookmarkClear();
            //创建新的wookmark对象
            handler = $('#waterfall li');
            handler.wookmark(options);
            }
        });
    }
};
 
$(document).ready(new function() {
    //绑定scroll事件.
    $(document).bind('scroll', onScroll);
    //第一次布局.
    handler = $('#waterfall li');
    handler.wookmark(options);
});

插件下载:https://github.com/GBKS/Wookmark-jQuery
官方主页:http://www.wookmark.com/jquery-plugin

解决图片容器相互重叠

站点访问资源速度很慢的情况下,部分图片容器会发生相互重叠的现象。原因是图片资源请求过慢,wookmark插件无法获得图片的准确height和width值,计算position:absolute;的top值不够准确。

问题解决办法:使用插件jquery.imagesloaded等待和监听页面内所有图片资源全部加载完毕后再执行。

插件下载地址:https://github.com/desandro/imagesloaded

在wookmark插件引用文件之前引用jquery.imagesloaded.js文件

使用代码:

function ($) {
    var loadedImages = 0, // Counter for loaded images
    handler = $('#tiles li'); // Get a reference to your grid items.
    // Prepare layout options.
    var options = {
        autoResize: true, // This will auto-update the layout when the browser window is resized.
        container: $('#main'), // Optional, used for some extra CSS styling
        offset: 5, // Optional, the distance between grid items
        outerOffset: 10, // Optional, the distance to the containers border
        itemWidth: 210 // Optional, the width of a grid item
    }; 
    $('#tiles').imagesLoaded(function(){
        // Call the layout function.
        handler.wookmark(options);
        // Capture clicks on grid items.
        handler.click(function(){
            // Randomize the height of the clicked item.
            var newHeight = $('img', this).height() + Math.round(Math.random() * 300 + 30);
            $(this).css('height', newHeight+'px'); 
            // Update the layout.
            handler.wookmark();
        });
    }).progress(function(instance, image) {
        // Update progress bar after each image load
        loadedImages++;
        if (loadedImages == handler.length)
        $('.progress-bar').hide();
        else
        $('.progress-bar').width((loadedImages / handler.length * 100) + '%');
    });
})(jQuery);

版权声明:本文为李维亮博主的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:http://www.liweiliang.com/214.html

标签: jQuery插件, wookmark

评论已关闭