myWaterfall

jQuery瀑布流布局插件

by q3011893

HTML

<div class="switch">
    <button>关闭瀑布流</button>
</div>
<div class="waterfall-container">
    <div class="box">
        <div class="box-content">
            <img src="http://cdn2.mhpbooks.com/2016/02/google.jpg">
            <p>谷歌公司成立于1998年9月4日,被公认为全球最大的搜索引擎。</p>
        </div>
    </div>
    <div class="box">
        <div class="box-content">
            <img src="https://www.google.com/landing/2step/images/why-need-img-2.png">
            <p>谷歌公司成立于1998年9月4日,被公认为全球最大的搜索引擎。</p>
        </div>
    </div>
    <div class="box">
        <div class="box-content">
            <img src="https://4.bp.blogspot.com/-Nyfdpymc_Lo/VkQw-nJ79mI/AAAAAAAARYg/6o9VeoTvu-I/s1600-r/logo_chrome.png"
            >
            <p>谷歌公司成立于1998年9月4日,被公认为全球最大的搜索引擎。</p></div>
    </div>
    <div class="box">
        <div class="box-content">
            <img src="http://lh3.googleusercontent.com/jN9tX6dCJ6_XL9E4K1KCO2Tuwe9_rYUbwv723eu6XGI0PWGLcPs0259VscOu249PPKKcU5AOXrq6JnleEaoK6K_JvZ2PY9lw3pMApzOpTQ=s660"
            >
            <p>谷歌公司成立于1998年9月4日,被公认为全球最大的搜索引擎。</p></div>
    </div>
    <div class="box">
        <div class="box-content">
            <img src="http://i1.sinaimg.cn/IT/2013/0320/U5385P2DT20130320080117.jpg">
            <p>谷歌公司成立于1998年9月4日,被公认为全球最大的搜索引擎。</p></div>
    </div>
    <div class="box">
        <div class="box-content">
            <img src="http://www.people.com.cn/mediafile/pic/20150906/81/15788599594280374761.jpg">
            <p>谷歌公司成立于1998年9月4日,被公认为全球最大的搜索引擎。</p></div>
    </div>

    <div class="box">
        <div class="box-content">
            <img src="http://www.kuqin.com/upimg/topic/google.jpg">
            <p>谷歌公司成立于1998年9月4日,被公认为全球最大的搜索引擎。</p></div>
    </div>
    <div class="box">
        <div class="box-content">
            <img src="http://www.xjp.cc/img.xjp.cc/2010/07/google-china.jpg">
            <p>谷歌公司成立于1998年9月4日,被公认为全球最大的搜索引擎。</p></div>
    </div>
    <div class="box">
        <div class="box-content">
            <img...

CSS

* {
        margin: 0;
        padding: 0;

    }

    .switch {
        text-align: center;
    }

    .switch button {
        height: 30px;
        width: 100px;
    }

    .waterfall-container {
    }

    .box {
        border: 1px dashed lightgray;
    }

    .box-content {
        border: 1px dashed brown;
    }

    .box-content img {
        width: 100%;
        border: 1px solid black;
        box-sizing: border-box;
    }

    .box-content p {
        font-size: 14px;
        box-sizing: border-box;
    }

JavaScript

(function ($) {

    //-----------------全局属性

    //储存选项
    var settings;
    //窗口改变的setouttim方法
    var st;

    //-----------------暴露接口
    var methods = {
        init: function (options) {

            settings = $.extend({
                container: this, // 父容器
                autoResize: true, // 当浏览器大小改变时是否自动调整
                offsetWidth: 5, // 每个元素之间的宽度距离(不加单位默认px)
                offsetHeight: 10, // 每个元素之间的高度距离(不加单位默认px)
                itemWidth: 260, // 每个元素的宽度,瀑布流高度是不限制的,所以只要宽度固定就可以了
                colNumber: 4, // 规定一行有几个元素,只有autoResize: false才生效
                colNumberMin: 2, // 规定一行最小有几个元素
                colNumberMax: 5, // 规定一行最大有几个元素
                resizeDelay: 0 // 自动调整延迟时间,一般情况下不需要设置,默认的就好了
            }, options);

            //参数验证
            if (typeof settings.autoResize !== 'boolean') {
                settings.autoResize = true;
            }
            if (isNaN(settings.offsetWidth) || settings.offsetWidth < 0) {
                settings.offsetWidth = 5;
            }
            if (isNaN(settings.offsetHeight) || settings.offsetHeight < 0) {
                settings.offsetHeight = 10;
            }
            if (isNaN(settings.itemWidth) || settings.itemWidth < 0) {
                settings.itemWidth = 10;
            }
            if (isNaN(settings.colNumber) || settings.colNumber < 0) {
                settings.colNumber = 4;
            }
            if (isNaN(settings.colNumberMin) || settings.colNumberMin < 0) {
                settings.colNumberMin = 2;
            }
            if (isNaN(settings.colNumberMax) || settings.colNumberMax < 0) {
                settings.colNumberMax = 5;
            }
            if (isNaN(settings.resizeDelay) || settings.resizeDelay < 0) {
                settings.resizeDelay = 50;
            }

            //窗口改变触发重新布局
            if (settings.autoResize) {
                $(window).on("resize", windowChangeAutoLayout);
            }

            //初始化布局
           ...