网页瀑布流布局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 相关文章推荐
Javascript学习笔记8 用JSON做原型
Jan 11 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
May 18 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
Dec 09 Javascript
javascript学习(二)javascript常见问题总结
Jan 02 Javascript
js自动下载文件到本地的实现代码
Apr 28 Javascript
图片上传判断及预览脚本的效果实例
Aug 07 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
网页从弹窗页面单选框传值至父页面代码分享
Sep 29 Javascript
jQuery多级手风琴菜单实例讲解
Oct 22 Javascript
JavaScript编程中布尔对象的基本使用
Oct 25 Javascript
Vue实例简单方法介绍
Jan 20 Javascript
对layui中表单元素的使用详解
Aug 15 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常用函数小技巧
2008/09/11 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
PHP递归的三种常用方式
2019/02/28 PHP
通过js为元素添加多项样式,浏览器全兼容写法
2014/08/30 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
详解JavaScript常量定义
2017/01/03 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
EJB的激活机制
2013/10/25 面试题
建筑文秘专业个人求职信范文
2013/12/28 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
党员示范岗材料
2014/12/19 职场文书
MySQL新手入门进阶语句汇总
2022/09/23 MySQL