微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

三种方式实现瀑布流布局

分别使用javascript,jquery,css实现瀑布流布局:

第一种方式:使用JavaScript:

rush:xhtml;"> <Meta charset="UTF-8"> 瀑布流布局
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">
Box">

第二种方式:使用jquery:(html结构跟css同上)

rush:js;"> $( window ).on( "load",function(){ waterfall('main','Box'); //模拟数据json var dataJson = {'data': [{'src':'30.jpg'},{'src':'45.jpg'}]}; window.onscroll=function(){ var isPosting = false; if(checkscrollside('main','Box') && !isPosting){ isPosting = true; $.each(dataJson.data,function(index,dom){ var $Box = $('
Box">
'); $Box.html('
'); $('#main').append($Box); waterfall('main','Box'); isPosting = false; }); } } }); /* parend 父级id clsName 元素class */ function waterfall(parent,clsName){ var $parent = $('#'+parent);//父元素 var $Boxs = $parent.find('.'+clsName);//所有Box元素 var iPinW = $Boxs.eq( 0 ).width()+15;// 一个块框Box的宽 var cols = Math.floor( $( window ).width() / iPinW );//列数 $parent.width(iPinW * cols).css({'margin': '0 auto'}); var pinHArr=[];//用于存储 每列中的所有块框相加的高度。 $Boxs.each( function( index,dom){ if( index < cols ){ pinHArr[ index ] = $(dom).height(); //所有列的高度 }else{ var minH = Math.min.apply( null,pinHArr );//数组pinHArr中的最小值minH var minHIndex = $.inArray( minH,pinHArr ); $(dom).css({ 'position': 'absolute','top': minH + 15,'left': $Boxs.eq( minHIndex ).position().left }); //添加元素后修改pinHArr pinHArr[ minHIndex ] += $(dom).height() + 15;//更新添加了块框后的列高 } }); } //检验是否满足加载数据条件,即触发添加块框函数waterfall()的高度:最后一个块框的距离网页顶部+自身高的一半(实现未滚到底就开始加载) function checkscrollside(parent,clsName){ //最后一个块框 var $lastBox = $('#'+parent).find('.'+clsName).last(),lastBoxH = $lastBox.offset().top + $lastBox.height()/ 2,scrollTop = $(window).scrollTop(),documentH = $(document).height(); return lastBoxH < scrollTop + documentH ? true : false; }

第三种方式:使用css:(html结构同上)

rush:css;"> .clearfix:after,.clearfix:before { content: " "; display: table; } .clearfix:after { clear: both; } .main { position: relative; [color=#ff0000]-webkit-column-width: 210px; -moz-column-width: 210px; -webkit-column-gap: 5px; -moz-column-gap: 5px;[/color] } .Box { float: left; padding: 15px 0 0 15px; } .Box .pic { width: 180px; height: auto; padding: 10px; border-radius: 5px; Box-shadow: 0 0 5px #cccccc; border: 1px solid #cccccc; } .Box .pic img { display: block; width: 100%; }

瀑布流实现方式比较:

Javascript原生方式/jquery方式

1、需要计算,列数 = 浏览器窗口宽度/图片宽度,图片定位是根据每一列的高度计算下来图片的位置;

2、图片排序是按照图片计算的位置横向排列,位置是计算出来的,比较规范

Css方式

1、不需要计算,浏览器自动计算,只需设置列宽,性能高;

2、列宽随着浏览器窗口大小进行改变,用户体验不好;

3、图片排序按照垂直顺序排列,打乱图片显示顺序;

4、图片加载还是依靠javascript/jquery实现

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程之家!

原文地址:https://www.jb51.cc/js/41843.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐