网页瀑布流布局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 相关文章推荐
JS正则验证邮箱的格式详细介绍
Nov 19 Javascript
鼠标滑在标题上显示图片的JS代码
Nov 19 Javascript
多个js毫秒倒计时同时进行效果
Jan 05 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
May 21 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
AngularJS下对数组的对比分析
Aug 24 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
Nov 28 Javascript
vue中阻止click事件冒泡,防止触发另一个事件的方法
Feb 08 Javascript
this在vue和小程序中的使用详解
Jan 28 Javascript
京东优选小程序的实现代码示例
Feb 25 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 Javascript
js实现淘宝浏览商品放大镜功能
Oct 28 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中array_keys和array_unique函数源码的分析
2016/02/26 PHP
PHP magento后台无法登录问题解决方法
2016/11/24 PHP
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
RR vs IO BO3 第二场2.13
2021/03/10 DOTA
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
easyui validatebox验证
2016/04/29 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
python实现手机通讯录搜索功能
2018/02/22 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
Flask实现图片的上传、下载及展示示例代码
2018/08/03 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
SQL数据库笔试题
2016/03/08 面试题
电信专业毕业生推荐信
2013/11/18 职场文书
保护环境的标语
2014/06/09 职场文书
公司委托书怎么写
2014/08/02 职场文书
2014年纪检工作总结
2014/11/12 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
公司放假通知怎么写
2015/04/15 职场文书
如何写好闭幕词
2019/04/02 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
浅谈Python项目的服务器部署
2021/04/25 Python