网页瀑布流布局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 相关文章推荐
实现复选框全选/全不选切换
Dec 23 Javascript
json跟xml的对比分析
Jun 10 Javascript
jQuery 常见操作实现方式和常用函数方法总结
May 06 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
Oct 22 Javascript
JS模拟并美化的表单控件完整实例
Aug 19 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
Aug 24 Javascript
深入理解选择框脚本[推荐]
Dec 13 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
简单的vue-resourse获取json并应用到模板示例
Feb 10 Javascript
javascript数据结构中栈的应用之符号平衡问题
Apr 11 Javascript
实例分析javascript中的异步
Jun 02 Javascript
在Vue里如何把网页的数据导出到Excel的方法
Sep 30 Javascript
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去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
ES6下React组件的写法示例代码
2017/05/04 Javascript
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
vue如何截取字符串
2019/05/06 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
selenium+python环境配置教程详解
2019/05/28 Python
python字典的遍历3种方法详解
2019/08/10 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
Laravel中Kafka的使用详解
2021/03/24 PHP
大学军训感言1000字
2014/02/25 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
交通安全学习心得体会
2016/01/18 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
Windows11里微软已经将驱动程序安装位置A盘删除
2021/11/21 数码科技
MySql数据库 查询时间序列间隔
2022/05/11 MySQL