网页瀑布流布局jQuery实现代码


Posted in Javascript onOctober 21, 2016

什么是瀑布流网页布局?

网页瀑布流布局jQuery实现代码

瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。

下面来看代码,用纯CSS3来做看效果怎样!

HTML

<div id="all">
<div class="box">
<div class="pic">
<img src="cars/1.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/2.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/3.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/4.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/5.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/6.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/7.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/8.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/9.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/10.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/11.jpg"/>
</div>
</div>
<div class="box">
<div class="pic">
<img src="cars/12.jpg"/>
</div>
</div>
</div>

这里用一个大盒子来装全部内容,小盒子box装块内容,pic盒子装图片。看css的代码

CSS

*{
margin: 0;
padding: 0;
}

#all{
/*关键代码*/
-webkit-column-width: 437px;
-moz-column-width: 437px;
-o-column-width: 437px;
-ms-column-width: 437px;
/*-webkit-column-count: 3;
-moz-column-count: 3;
-o-column-count: 3;
-ms-column-count: 3;*/
/*-webkit-column-rule: 2px dashed #F00;
-moz-column-rule: 2px dashed #F00;
-o-column-rule: 2px dashed #F00;
-ms-column-rule: 2px dashed #F00;*/
/*-webkit-column-gap: 5px;
-moz-column-gap: 5px;
-o-column-gap: 5px;
-ms-column-gap: 5px;*/
}

.box{
padding: 15px 0 0 15px;
}
.pic{
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px;
box-shadow: 0 0 5px #ccc ;
width: 400px;
}
.pic>img{
width: 400px;
height: auto;
}

效果就出来了

网页瀑布流布局jQuery实现代码

可见CSS3虽然实现了瀑布流,但是画风看起来诡异,左右排布间距不够灵活。列宽随着浏览器窗口大小进行改变,用户体验不好,图片排序按照垂直顺序排列,打乱图片显示顺序,图片加载还是依靠JavaScript来实现。唯一优势是不需要计算,浏览器自动计算,只需设置列宽,性能高。

为了得到更好的效果,所以我们还是用算法来实现吧,下面来看jquery代码配合css来实现瀑布流。

CSS

*{
margin: 0;
padding: 0;
}


#all{
position: relative;
}
.box{
padding: 15px 0 0 15px;
float: left;
}
.pic{
padding: 10px;
border: 1px solid #ccc;
border-radius: 5px;
box-shadow: 0 0 5px #ccc ;
}
.pic>img{
width: 400px;
height: auto;
}

jquery

$(window).load(function(){
waterfall();
// var dataInt={"data":[{"src":"cars/1.jpg"},{"src":"cars/2.jpg"},{"src":"cars/3.jpg"},{"src":"cars/4.jpg"}]}
// $(window).scroll(function(){
// if(checkScrollSlide){
// $.each(dataInt.data,function(key,value){
// var oBox=$("<div>").addClass("box").appendTo($("#all"));
// var oPic=$("<div>").addClass("pic").appendTo($(oBox));
// var oImg=$("<img>").attr("src",$(value).attr("src")).appendTo($(oPic));
// })
// waterfall();
// }
// })
})

function waterfall(){
var $boxs=$("#all>div");
var w=$boxs.eq(0).outerWidth();
var cols=Math.floor($(window).width()/w);
$('#all').width(w*cols).css("margin","0 auto");
var hArr=[];
$boxs.each(function(index,value){
var h=$boxs.eq(index).outerHeight();
if(index<cols){
hArr[index]=h;
}else{
var minH=Math.min.apply(null,hArr);
var minHIndex=$.inArray(minH,hArr);
// console.log(minH);
$(value).css({
'position':'absolute',
'top':minH+'px',
'left':minHIndex*w+'px'
})
hArr[minHIndex]+=$boxs.eq(index).outerHeight();
}
});
}


//function checkScrollSlide(){
// var $lastBox=$("#all>div").last();
// var lastBoxDis=$lastBox.offset().top+Math.floor($lastBox.outerHeight()/2);
// var scrollTop=$(window).scrollTop();
// var documentH=$(window).height();
// return(lastBoxDis<scrollTop+documentH)?true:false;
//}

效果如下

网页瀑布流布局jQuery实现代码

很明显效果好多了,图片排序是按照图片计算的位置横向排序,位置是计算出来的,比较规范。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
jquery中live()方法和bind()方法区别分析
Jun 23 Javascript
jQuery中页面返回顶部的方法总结
Dec 30 Javascript
PHP实现记录代码运行时间封装类实例教程
May 08 Javascript
基于Vue实现后台系统权限控制的示例代码
Aug 29 Javascript
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
Angular2实现组件交互的方法分析
Dec 19 Javascript
解决layui动态添加的元素click等事件触发不了的问题
Sep 20 Javascript
深度解读vue-resize的具体用法
Jul 08 Javascript
简单了解前端渐进式框架VUE
Jul 20 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 Javascript
vue使用watch监听属性变化
Apr 30 Vue.js
js运动事件函数详解
Oct 21 #Javascript
javascript轮播图算法
Oct 21 #Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
Oct 21 #Javascript
javascript简易画板开发
Apr 12 #Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
Oct 21 #Javascript
BootStrap轻松实现微信页面开发代码分享
Oct 21 #Javascript
浅谈angularjs module返回对象的坑(推荐)
Oct 21 #Javascript
You might like
php递归方法实现无限分类实例代码
2014/02/28 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
python 检查文件mime类型的方法
2018/12/08 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
一套Delphi的笔试题二
2013/05/11 面试题
纠纷协议书
2014/04/16 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
总经理年会致辞
2015/07/29 职场文书