网页瀑布流布局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实现的元素拖动函数宿主为浏览器
Jul 21 Javascript
JS函数this的用法实例分析
Feb 05 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
Apr 01 Javascript
JS无缝滚动效果实现方法分析
Dec 21 Javascript
JavaScript省市级联下拉菜单实例
Feb 14 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
Apr 09 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
Aug 24 Javascript
react+redux仿微信聊天界面
Jun 21 Javascript
前端Electron新手入门教程详解
Jun 21 Javascript
vue实现在v-html的html字符串中绑定事件
Oct 28 Javascript
vue+axios全局添加请求头和参数操作
Jul 24 Javascript
javascript实现多边形碰撞检测
Oct 24 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/06/15 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php绘图中显示不出图片的原因及解决
2014/03/05 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
jquery 经典动画菜单效果代码
2010/01/26 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
详解Vue之计算属性
2020/06/20 Javascript
python实现清屏的方法
2015/04/30 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
木马的传播途径主要有哪些
2016/04/08 面试题
2015年小学校长工作总结
2015/05/19 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis
教你部署vue项目到docker
2022/04/05 Vue.js
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers
Python使用openpyxl模块处理Excel文件
2022/06/05 Python