我的编程空间,编程开发者的网络收藏夹
学习永远不晚

HTML中如何实现瀑布流布局

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

HTML中如何实现瀑布流布局

这篇文章将为大家详细讲解有关HTML中如何实现瀑布流布局,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

第一种方式:使用JavaScript:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>瀑布流布局</title>
<style>
*{padding:0;margin:0;}
.clearfix:after,
.clearfix:before {
content: " ";
display: table;
}
.clearfix:after {
clear: both;
}
.main {
position: relative;
-webkit-column-width: 210px;
-moz-column-width: 210px;
-webkit-column-gap: 5px;
-moz-column-gap: 5px;
}
.box {
float: left;
padding: 15px 0 0 15px;
}
.box .pic {
width: 180px;
height: auto;
padding: 10px;
border-radius: 5px;
box-shadow: 0 0 5px #cccccc;
border: 1px solid #cccccc;
}
.box .pic img {
display: block;
width: 100%;
}
</style>
</head>
<body>
<div class="main clearfix" id="main">
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/0.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/1.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/2.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/3.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/4.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/5.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/6.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/7.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/8.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/9.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/10.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/11.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/12.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/13.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/14.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/15.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/16.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/17.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/18.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/19.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/20.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/21.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/22.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/23.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/24.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/25.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/26.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/27.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/28.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/29.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/25.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/26.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/27.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/28.jpg"></div>
</div>
<div class="box">
<div class="pic"><img class="lazy" data-src="./images/29.jpg"></div>
</div>
</div>
<script>
window.onload = function(){
waterfall('main','box');
//模拟json数据
var dataJson = {'data': [{'class="lazy" data-src':'30.jpg'},{'class="lazy" data-src':'31.jpg'},{'class="lazy" data-src':'32.jpg'},{'class="lazy" data-src':'33.jpg'},{'class="lazy" data-src':'34.jpg'},{'class="lazy" data-src':'35.jpg'},{'class="lazy" data-src':'36.jpg'},{'class="lazy" data-src':'37.jpg'},{'class="lazy" data-src':'38.jpg'},{'class="lazy" data-src':'39.jpg'},{'class="lazy" data-src':'40.jpg'},{'class="lazy" data-src':'41.jpg'},{'class="lazy" data-src':'42.jpg'},{'class="lazy" data-src':'43.jpg'},{'class="lazy" data-src':'44.jpg'},{'class="lazy" data-src':'45.jpg'}]};
//监听scroll事件
window.onscroll = function(){
var isPosting = false;
if(checkScollSlide('main','box') && !isPosting){
var oParent = document.getElementById('main');
for(var i in dataJson.data){
isPosting = true;
var oBox = document.createElement('div');
oBox.className = 'box';
oBox.innerHTML = '<div class="pic"><img class="lazy" data-src="./images/'+dataJson.data[i].class="lazy" data-src+'"></div>';
oParent.appendChild(oBox);
}
isPosting = false;
waterfall('main','box');
}
}
}

function waterfall(parent,clsName){
//获取父元素
var oParent = document.getElementById(parent),
//获取所有box
aBoxArr = oParent.getElementsByClassName(clsName),
//单个box宽度
iBoxW = aBoxArr[0].offsetWidth,
// 列数
cols = Math.floor(document.documentElement.clientWidth / iBoxW);
oParent.style.cssText = 'width:'+iBoxW*cols+'px;margin:0 auto;';
//储存所有的高度
var hArr = [];
for(var i = 0; i < aBoxArr.length; i++){
if(i < cols){
hArr[i] = aBoxArr[i].offsetHeight;
}else{
//获取hArr最小值
var minH = Math.min.apply(null,hArr),
// hArr最小值索引index
minHIndex = getMinHIndex(hArr,minH);
aBoxArr[i].style.cssText = 'position:absolute;top:'+minH+'px;left:'+aBoxArr[minHIndex].offsetLeft+'px;';
//添加元素之后更新hArr
hArr[minHIndex] += aBoxArr[i].offsetHeight;
}
}
}
//获取最小值索引
function getMinHIndex(arr,val){
for(var i in arr){
if(arr[i] == val){
return i;
}
}
}
//检查是否满足加载数据条件,parent 父元素id clsName 块元素类
function checkScollSlide(parent,clsName){
var oParent = document.getElementById(parent),
aBoxArr = oParent.getElementsByClassName(clsName),
// 最后一个box元素的offsetTop+高度的一半
lastBoxH = aBoxArr[aBoxArr.length - 1].offsetTop + aBoxArr[aBoxArr.length - 1].offsetHeight / 2,
//兼容js标准模式和混杂模式
scrollTop = document.documentElement.scrollTop || document.body.scrollTop,
height = document.documentElement.clientHeight || document.body.clientHeight;
return lastBoxH < scrollTop + height ? true : false;
}
</script>
</body>
</html>

第二种方式:使用jquery:(html结构跟css同上)

$( window ).on( "load", function(){
 waterfall('main','box');
 //模拟数据json
 var dataJson = {'data': [{'class="lazy" data-src':'30.jpg'},{'class="lazy" data-src':'31.jpg'},{'class="lazy" data-src':'32.jpg'},{'class="lazy" data-src':'33.jpg'},{'class="lazy" data-src':'34.jpg'},{'class="lazy" data-src':'35.jpg'},{'class="lazy" data-src':'36.jpg'},{'class="lazy" data-src':'37.jpg'},{'class="lazy" data-src':'38.jpg'},{'class="lazy" data-src':'39.jpg'},{'class="lazy" data-src':'40.jpg'},{'class="lazy" data-src':'41.jpg'},{'class="lazy" data-src':'42.jpg'},{'class="lazy" data-src':'43.jpg'},{'class="lazy" data-src':'44.jpg'},{'class="lazy" data-src':'45.jpg'}]};
 window.onscroll=function(){
 var isPosting = false;
 if(checkscrollside('main','box') && !isPosting){
  isPosting = true;
  $.each(dataJson.data,function(index,dom){
  var $box = $('<div class="box"></div>');
  $box.html('<div class="pic"><img class="lazy" data-src="./images/'+$(dom).attr('class="lazy" data-src')+'"></div>');
  $('#main').append($box);
  waterfall('main','box');
  isPosting = false;
  });
 }
 }
});

function waterfall(parent,clsName){
 var $parent = $('#'+parent);//父元素
 var $boxs = $parent.find('.'+clsName);//所有box元素
 var iPinW = $boxs.eq( 0 ).width()+15;// 一个块框box的宽
 var cols = Math.floor( $( window ).width() / iPinW );//列数
 $parent.width(iPinW * cols).css({'margin': '0 auto'});
 var pinHArr=[];//用于存储 每列中的所有块框相加的高度。
 $boxs.each( function( index, dom){
 if( index < cols ){
  pinHArr[ index ] = $(dom).height(); //所有列的高度
 }else{
  var minH = Math.min.apply( null, pinHArr );//数组pinHArr中的最小值minH
  var minHIndex = $.inArray( minH, pinHArr );
  $(dom).css({
  'position': 'absolute',
  'top': minH + 15,
  'left': $boxs.eq( minHIndex ).position().left
  });
  //添加元素后修改pinHArr
  pinHArr[ minHIndex ] += $(dom).height() + 15;//更新添加了块框后的列高
 }
 });
}
//检验是否满足加载数据条件,即触发添加块框函数waterfall()的高度:最后一个块框的距离网页顶部+自身高的一半(实现未滚到底就开始加载)
function checkscrollside(parent,clsName){
 //最后一个块框
 var $lastBox = $('#'+parent).find('.'+clsName).last(),
 lastBoxH = $lastBox.offset().top + $lastBox.height()/ 2,
 scrollTop = $(window).scrollTop(),
 documentH = $(document).height();
 return lastBoxH < scrollTop + documentH ? true : false;
}

第三种方式:使用css:(html结构同上)

.clearfix:after,
.clearfix:before {
 content: " ";
 display: table;
}
.clearfix:after {
 clear: both;
}
.main {
 position: relative;
 [color=#ff0000]-webkit-column-width: 210px;
 -moz-column-width: 210px;
 -webkit-column-gap: 5px;
 -moz-column-gap: 5px;[/color]
}
.box {
 float: left;
 padding: 15px 0 0 15px;
}
.box .pic {
 width: 180px;
 height: auto;
 padding: 10px;
 border-radius: 5px;
 box-shadow: 0 0 5px #cccccc;
 border: 1px solid #cccccc;
}
.box .pic img {
 display: block;
 width: 100%;
}

瀑布流实现方式比较:

Javascript原生方式/jquery方式

1、需要计算,列数 = 浏览器窗口宽度/图片宽度,图片定位是根据每一列的高度计算下来图片的位置;

2、图片排序是按照图片计算的位置横向排列,位置是计算出来的,比较规范

Css方式

1、不需要计算,浏览器自动计算,只需设置列宽,性能高;

2、列宽随着浏览器窗口大小进行改变,用户体验不好;

3、图片排序按照垂直顺序排列,打乱图片显示顺序;

4、图片加载还是依靠javascript/jquery实现

关于“HTML中如何实现瀑布流布局”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

HTML中如何实现瀑布流布局

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用HTML和CSS实现瀑布流布局

如何使用HTML和CSS实现瀑布流布局瀑布流布局(Waterfall Layout)是一种常见的网页布局方式,它可以使网页内容呈现出像瀑布流一样的效果,每一列的高度可以不同,让网页看起来更加有趣和动感。在这篇文章中,我们将介绍如何使用HTM
2023-10-24

如何在css中实现瀑布流布局

这期内容当中小编将会给大家带来有关如何在css中实现瀑布流布局,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.multi-column多列布局实现瀑布流先简单的讲下multi-column相关的部分属性
2023-06-15

如何用js实现瀑布流布局

这篇“如何用js实现瀑布流布局”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用js实现瀑布流布局”文章吧。一、前端代码编
2023-07-05

AJAX实现瀑布流布局

这篇文章给大家分享的是有关AJAX实现瀑布流布局的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。瀑布流是当前一种比较流行的网站界面布局方式,参差不齐的多栏布局以及到达底部自动加载的方式,使网站在视觉和用户体验上都能
2023-06-08

如何使用HTML和CSS实现瀑布流网格布局

瀑布流网格布局是一种常见的布局方式,可以使网页元素呈现出类似瀑布流般的效果,给用户带来更好的视觉体验。本文将介绍如何使用HTML和CSS实现瀑布流网格布局,并提供具体的代码示例。首先,我们需要准备一些HTML结构和CSS样式。下面是一个基本
2023-10-21

如何使用HTML和CSS实现瀑布流卡片布局

在网页开发中,瀑布流卡片布局是一种常见且炫酷的展示方式。瀑布流布局的特点是卡片呈现不规则的形状,高度和位置会根据内容的多少和屏幕大小自动适应,使页面更具吸引力和互动性。本文将介绍如何使用HTML和CSS实现瀑布流卡片布局,并提供具体的代码示
2023-10-21

如何使用HTML和CSS实现瀑布流图库布局

如何使用HTML和CSS实现瀑布流图库布局瀑布流布局是一种常见的图库布局方式,它将图片以多列的形式排列,使得页面看起来更加有趣和美观。本文将介绍如何使用HTML和CSS实现瀑布流图库布局,并提供具体的代码示例。一、HTML结构首先,我们需要
2023-10-24

如何使用HTML和CSS实现瀑布流图片布局

如何使用HTML和CSS实现瀑布流图片布局瀑布流图片布局是一种常见的网页设计方式,它通过不规则的列布局将图片呈现在网页上,形成一种自然流动的视觉效果。在本文中,我们将介绍如何使用HTML和CSS实现瀑布流图片布局,并提供具体的代码示例。HT
2023-10-24

JavaScript如何实现瀑布流布局效果

这篇文章主要讲解了“JavaScript如何实现瀑布流布局效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript如何实现瀑布流布局效果”吧!如何实现思路:将内容宽度一致,高度
2023-07-06

怎么实现瀑布流布局

本篇文章给大家分享的是有关怎么实现瀑布流布局,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、JS 实现瀑布流思路分析瀑布流布局的特点是等宽不等高。为了让最后一行的差距最小,从
2023-06-09

如何使用Css Flex 弹性布局实现瀑布流布局

随着网页设计的不断发展,瀑布流布局成为了一种非常流行的页面布局方式。与传统的网格布局不同,瀑布流布局能够自适应屏幕大小,并且呈现出独特的流动感。在本文中,我们将介绍如何使用CSS Flex 弹性布局来实现瀑布流布局,并提供具体的代码示例。C
2023-10-21

编程热搜

目录