简单的瀑布流

最近需要一个简单的瀑布流效果,所以网上找了一个,修改了部分代码

1、轻量代码,压缩2kb。

2、适用宽度自适应布局。瀑布流列由css控制。(先加入空列,获取宽度,删除空列,根据总宽计算列数。)

wall.js

"use strict";
(function ($) {
    $.fn.jaliswall = function (options) {
        this.each(function () {
            var defaults = {
                item: ‘.wall-item‘,
                columnClass: ‘.wall-column‘,
                resize: true
            };
            var prm = $.extend(defaults, options);
            var container = $(this);
            var items = container.find(prm.item);
            var elemsDatas = [];
            var columns = [];
            var nbCols = getNbCols();
            init();
            function init() {
                nbCols = getNbCols();
                recordAndRemove();
                print();
                if (prm.resize) {
                    $(window).resize(function () {
                        if (nbCols != getNbCols()) {
                            nbCols = getNbCols();
                            setColPos();
                            print();
                        }
                    });
                }
            }
            function getNbCols() {
                var instanceForCompute = false;
                if (container.find(prm.columnClass).length == 0) {
                    instanceForCompute = true;
                    container.append(‘<div class=\‘‘ + parseSelector(prm.columnClass) + ‘\‘></div>‘);
                }
                var colWidth = container.find(prm.columnClass).outerWidth(true);
                var wallWidth = container.innerWidth();
                if (instanceForCompute)
                    container.find(prm.columnClass).remove();
                return Math.round(wallWidth / colWidth);
            }
            function recordAndRemove() {
                items.each(function (index) {
                    var item = $(this);
                    elemsDatas.push({
                        content: item.html(),
                        class: item.attr(‘class‘),
                        href: item.attr(‘href‘),
                        id: item.attr(‘id‘),
                        colid: index % nbCols
                    });
                    item.remove();
                });
            }
            function setColPos() {
                for (var i in elemsDatas) {
                    elemsDatas[i].colid = i % nbCols;
                }
            }
            function parseSelector(selector) {
                return selector.slice(1, selector.length);
            }
            function print() {
                var tree = ‘‘;
                for (var i = 0; i < nbCols; i++) {
                    tree += ‘<div class=\‘‘ + parseSelector(prm.columnClass) + ‘\‘></div>‘;
                }
                container.html(tree);
                for (var i in elemsDatas) {
                    var html = ‘‘;
                    var content = elemsDatas[i].content != undefined ? elemsDatas[i].content : ‘‘;
                    var href = elemsDatas[i].href != href ? elemsDatas[i].href : ‘‘;
                    var classe = elemsDatas[i].class != undefined ? elemsDatas[i].class : ‘‘;
                    var id = elemsDatas[i].id != undefined ? elemsDatas[i].id : ‘‘;
                    if (elemsDatas[i].href != undefined) {
                        html += ‘<a ‘ + getAttr(href, ‘href‘) + ‘ ‘ + getAttr(classe, ‘class‘) + ‘ ‘ + getAttr(id, ‘id‘) + ‘>‘ + content + ‘</a>‘;
                    } else {
                        html += ‘<div ‘ + getAttr(classe, ‘class‘) + ‘ ‘ + getAttr(id, ‘id‘) + ‘>‘ + content + ‘</a>‘;
                    }
                    var tHeight = container.children(prm.columnClass).eq(0).height(),childIndex = 0;
                    for (var j = 0; j < nbCols; j++) {
                        if(container.children(prm.columnClass).eq(j).height() < tHeight){
                            childIndex = j;
                        }
                    }
                    container.children(prm.columnClass).eq(childIndex).append(html);

                }
            }
            function getAttr(attr, type) {
                return attr != undefined ? type + ‘=\‘‘ + attr + ‘\‘‘ : ‘‘;
            }
        });
        return this;
    };
}(jQuery));

压缩后代码

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!‘‘.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return‘\\w+‘};c=1;};while(c--)if(k[c])p=p.replace(new RegExp(‘\\b‘+e(c)+‘\\b‘,‘g‘),k[c]);return p;}(‘"Z 13";(4($){$.Y.X=4(D){p.E(4(){2 S={b:\‘.G-b\‘,8:\‘.G-10\‘,s:y};2 5=$.11(S,D);2 6=$(p);2 H=6.q(5.b);2 3=[];2 12=[];2 c=m();J();4 J(){c=m();K();u();e(5.s){$(W).s(4(){e(c!=m()){c=m();M();u()}})}}4 m(){2 w=19;e(6.q(5.8).O==0){w=y;6.U(\‘<l d=\\\‘\‘+t(5.8)+\‘\\\‘></l>\‘)}2 L=6.q(5.8).1a(y);2 I=6.1c();e(w)6.q(5.8).F();o 1b.18(I/L)}4 K(){H.E(4(Q){2 b=$(p);3.15({f:b.h(),d:b.g(\‘d\‘),7:b.g(\‘7\‘),9:b.g(\‘9\‘),T:Q%c});b.F()})}4 M(){r(2 i R 3){3[i].T=i%c}}4 t(v){o v.14(1,v.O)}4 u(){2 x=\‘\‘;r(2 i=0;i<c;i++){x+=\‘<l d=\\\‘\‘+t(5.8)+\‘\\\‘></l>\‘}6.h(x);r(2 i R 3){2 h=\‘\‘;2 f=3[i].f!=n?3[i].f:\‘\‘;2 7=3[i].7!=7?3[i].7:\‘\‘;2 C=3[i].d!=n?3[i].d:\‘\‘;2 9=3[i].9!=n?3[i].9:\‘\‘;e(3[i].7!=n){h+=\‘<a \‘+k(7,\‘7\‘)+\‘ \‘+k(C,\‘d\‘)+\‘ \‘+k(9,\‘9\‘)+\‘>\‘+f+\‘</a>\‘}16{h+=\‘<l \‘+k(C,\‘d\‘)+\‘ \‘+k(9,\‘9\‘)+\‘>\‘+f+\‘</a>\‘}2 N=6.z(5.8).A(0).P(),B=0;r(2 j=0;j<c;j++){e(6.z(5.8).A(j).P()<N){B=j}}6.z(5.8).A(B).U(h)}}4 k(g,V){o g!=n?V+\‘=\\\‘\‘+g+\‘\\\‘\‘:\‘\‘}});o p}}(17));‘,62,75,‘||var|elemsDatas|function|prm|container|href|columnClass|id||item|nbCols|class|if|content|attr|html|||getAttr|div|getNbCols|undefined|return|this|find|for|resize|parseSelector|print|selector|instanceForCompute|tree|true|children|eq|childIndex|classe|options|each|remove|wall|items|wallWidth|init|recordAndRemove|colWidth|setColPos|tHeight|length|height|index|in|defaults|colid|append|type|window|jaliswall|fn|use|column|extend|columns|strict|slice|push|else|jQuery|round|false|outerWidth|Math|innerWidth‘.split(‘|‘),0,{}))

页面以及样式。

index.html

<!DocType html>
<html>
	<head>
		<meta charset="utf-8">
		<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
		<meta content="yes" name="apple-mobile-web-app-capable">
		<title></title>
		<style>
			* {
			  margin: 0;
			  padding: 0;
			}
			html,body{font-size:14px;line-height:1.5;min-height:100%;background:#f0f0f0;color:#505050;}
			h3,p {margin:0;padding:0;}
			h3 {font-size:1.2rem;}
			ul,li{list-style:none;margin:0;padding:0;}
			.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}
			.clearfix{*+height:1%;}
			.textCenter {text-align:center;}
			.mtp5 {margin-top:5px;}
			.mtp10 {margin-top:10px;}
			.header {font-weight:normal;font-size:2em;padding:1em 0;}
			.wall {margin-left:auto;margin-right:auto;max-width:1000px;}
			.article {text-align:center;
			  display: block;
			  margin: 0 0 12px 0;
			  padding: 12px;
			  background: white;
			  border-radius: 3px;
			  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.05);
			  transition: all 220ms;
			}
			.article:hover {
			  box-shadow: 0px 2px 3px 1px rgba(0, 0, 0, 0.1);
			  transform: translateY(-5px);
			  transition: all 220ms;
			}
			.article h2 {
			  text-align: center;
			  font-size: 14px;
			  text-transform: uppercase;
			  margin: 0 0 12px 0;
			}

			.wall {
			  display: block;
			  position: relative;
			}
			.wall-column {
			  display: block;
			  position: relative;
			  /*width: 33.333333%;*/
			  width: 25%;
			  float: left;
			  padding: 0 12px;
			  box-sizing: border-box;
			}
			@media (max-width: 640px) {
			  .wall-column {
			    width: 50%;
			  }
			}
			@media (max-width: 480px) {
			  .wall-column {
			    width: auto;
			    float: none;
			  }
			}
			.article dt {border-radius:5px;padding:8px 0;background:#4e81bd;border:2px solid #385c8b;color:#fff;}
			.article dd {border-radius:5px;margin-top:10px;padding:5px 0;border:1px solid #4a7ebb;background: linear-gradient(to bottom, #e1ebff , #a6c5ff); }
		</style>
	</head>
	<body>
		<h2 class="header textCenter">信息系统</h2>
		<div class="wall clearfix">
			<div class="article">
				<dl>
					<dt>集团类</dt>
					<dd>企业资源管理 SAP</dd>
					<dd>商业智能 BI</dd>
					<dd>员工助手 HLP</dd>
					<dd>协同办公 OA</dd>
					<dd>微信企业号</dd>
					<dd>知识库 KM</dd>
					<dd>文档加密</dd>
				</dl>
			</div>
			<div class="article">
				<dl>
					<dt>营运营销类</dt>
					<dd>门店收银 POS</dd>
					<dd>门店销售 ERP</dd>
					<dd>电子处方 EPS</dd>
					<dd>会员管理 CRM</dd>
					<dd>品类管理 JDA</dd>
					<dd>营销共享平台 FSP</dd>
					<dd>视频点检 MCP</dd>
				</dl>
			</div>
			<div class="article">
				<dl>
					<dt>新零售类</dt>
					<dd>微信公众号</dd>
					<dd>微信小程序</dd>
					<dd>O2O 饿了么<br>美团 京东到家</dd>
					<dd>B2C电商 Hybris</dd>
					<dd>门店一体机 PAD</dd>
					<dd>呼叫中心 400</dd>
				</dl>
			</div>
			<div class="article">
				<dl>
					<dt>供应链类</dt>
					<dd>仓库管理 WMS</dd>
					<dd>供应商管理 SRM</dd>
					<dd>药品追溯平台 TCODE</dd>
					<dd>运输管理 TMS</dd>
					<dd>温湿度监控 WSD</dd>
				</dl>
			</div>
			<div class="article">
				<dl>
					<dt>人资行政类</dt>
					<dd>人资管理 HRM</dd>
					<dd>档案管理 ERMS</dd>
					<dd>企业内部管理 EM</dd>
					<dd>考勤管理 KQ</dd>
				</dl>
			</div>
			<div class="article">
				<dl>
					<dt>财务类</dt>
					<dd>资金管理 BFS</dd>
				</dl>
			</div>
			<div class="article">
				<dl>
					<dt>拓展类</dt>
					<dd>房屋租赁</dd>
				</dl>
			</div>
			<div class="article">
				<dl>
					<dt>拓展类</dt>
					<dd>房屋租赁</dd>
				</dl>
			</div>
			<div class="article">
				<dl>
					<dt>创新业务类</dt>
					<dd>门诊管理 HIS</dd>
				</dl>
			</div>
		</div>
		<script type="text/javascript" src="jquery-2.1.1.min.js"></script>
		<script type="text/javascript" src="wall.js"></script>
		<script type="text/javascript">
			$(‘.wall‘).jaliswall({ item: ‘.article‘ });
		</script>
	</body>
</html>

最终效果

PC端

移动

其他。这里的其他宽度是480-640的宽度,可以根据实际调整。

原文地址:https://www.cnblogs.com/vmumu/p/9964025.html

时间: 2024-10-01 06:42:36

简单的瀑布流的相关文章

javascript 简单的瀑布流

刚开始接触js,就想写写经典的瀑布流,搜了下网上的教程,发现大多是用jquery写的,非常简单,用它也不用考虑兼容性的问题(jquery已经考虑到了),就想自己用原生的js写个简单的瀑布流模型,暂且没有考虑到拖动时自动排版的情形,以后再添加.(发现用原生的js果然步骤比较多啊!很多方法都很底层的!) <!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content=&qu

利用JS实现简单的瀑布流效果

哈哈, 我又来啦, 在这一段时间里, 我简单的学习了一下javascript(JS), 虽然不是很懂啦, 但是我也简单的尝试着做了点小东西, 就比如现在流行的瀑布流效果, 经过我的努力终于成功的完成了, 虽然中间非常的坎坷, 并不是一帆风顺但是最终我还是实现了个简单的效果, 下面就为大家简单的介绍下, 不知道的友友们, 有兴趣的话, 可以来参考下, 欢迎指出缺点和不足! 一.瀑布流之准备工作   首先声明下, 为了方便演示和联系, 我使用的是本地图片, 如果大家有需要的话可以尝试着写下网络的,

AJAX异步实现简单的瀑布流

传统瀑布流布局ul-li,需要先设定显示几列,每列是一个li,需要左浮动并指定宽度,li里面的布局也要先布局好,主要是要定宽,高度自动:然后通过ajax异步,从数据库中得到数据,遍历后将数据插入最矮的li中 HTML中的代码: <!--定义JS中需要的数据--><script type="text/javascript">var ajaxHandle='<{:U("Index/Typeshow/ajax","",&q

简单瀑布流封装

function createLi(){ var oLi=document.createElement('li'); oLi.style.height=parseInt(50+Math.random()*400)+'px'; oLi.style.background='rgb('+rnd(0,255)+','+rnd(0,255)+','+rnd(0,255)+')'; return oLi; }; function rnd(n,m){ return parseInt(Math.random()

iOS之简单瀑布流的实现

iOS之简单瀑布流的实现 前言 超简单的瀑布流实现,这里说一下笔者的思路,详细代码在这里. 实现思路 collectionView能实现各中吊炸天的布局,其精髓就在于UICollectionViewLayout,因此我们要自定义一个layout来继承系统的UICollectionViewLayout,所有工作都在这个类中进行. 1.定义所需属性 瀑布流的思路就是,从上往下,那一列最短,就把下一个item放在哪一列,因此我们需要定义一个字典来记录每一列的最大y值 每一个item都有一个attrib

简单几行代码实现瀑布流

<!DOCTYPE html> <html> <!-- author : wsj aim : bky date : 2019-12 bug : no --> <body> <style> .father{ width: 100%;    box-sizing: border-box;     column-count: 2;    column-gap:15rpx;    padding: 0 20rpx; } .list{ box-sizing

ios图片瀑布流代码

ios瀑布流,实现简单的瀑布流视图布局,可以显示网络图片,下拉刷新,上拉加载更多. 下载:http://www.huiyi8.com/sc/9087.html ios图片瀑布流代码,布布扣,bubuko.com

js实现瀑布流

下午查找了瀑布流的相关原理,找了一些css3实现的还有js实现的,最后总结了一些比较简单的,易懂的整理起来 1.css3实现 只要运用到    column-count分列 column-width固定宽度 column-gap设置列间的间隔 break-inside:avoid防止换行 注意: Internet Explorer 9及更早 IE 版本浏览器不支持 column-count 属性. 下面是一个例子: html代码: <!DOCTYPE html> <html> &l

瀑布流框架的搭建

瀑布流大家都应该熟悉了,现在大部分电商应用中或多或少的都用到瀑布流,它可以吸引用户的眼球,使用户不易产生视觉疲劳,苹果在iOS6中增添了UICollectionView控件,这个控件可以说是UITableView的升级版,通过这个控件我们就能很简单的做出瀑布流,后面通过自己的封装可以让其变成一个小框架,更简单的应用到我们之后的开发中 最近开通了简书欢迎大家关注,我会不定期的分享我的iOS开发经验  点击关注-->Melody_Zhy 如果想做瀑布流,那么就要自定义CollectionViewFl