瀑布流图文设置伪静态的步骤
最佳回答
步骤一:构建成行元素 + 寻找新增元素追加位置
瀑布流所有元素的宽度是固定的,我们用浏览器的宽度除以每个瀑布流块的宽度,就是每一行可容纳的瀑布流块的个数.因为,每个瀑布流块的高度不一,我们姑且把组成一行的这组元素称为成行元素,在成行元素放置完毕后,我们如果要再增加一个元素,那么它的位置应该这样找?
“获取成行元素集合中高度最低的那个元素,待放置的元素的top值应该是这个最低元素的高,left值应该是这个最低元素的left值”
这样,新增的这一个元素我们就找到了它存放的位置.这样成行元素中的最低高度值就变为了原来的高度+新增元素的高度.
步骤二:重复步骤一,依赖成行元素追加新元素
步骤一中我们已经实现了一次成行元素追加一个新的元素,这样新元素增加之后我们就构建了新的成行元素,之后的操作就是在新的成行元素中追加新元素,原理同步骤一.
<!doctype html>
<meta charset="UTF-8">
<title>瀑布流效果实现
<script type="text/javascript" src="scripts/jquery-1.8.2.min.js">
<script type="text/javascript" src="scripts/jquery.easydrag.handler.beta2.js">
<script type="text/javascript">
window.onload=function{
//获取父级对象
var oParent = document.getElementById("main");
//获取父级[第一个参数]下的所有的子元素[按照第二个参数匹配]
var aPin =getClassObject(oParent,"pin");
//获取每一个块的宽度
var iPinW = aPin[0].offsetWidth;
// //计算每行放多少个pin(瀑布流块)页面的宽度/每一个瀑布流块的宽度
var num = Math.floor(document.documentElement.clientWidth/iPinW);
//重置父级的样式,这样保证图片整体居中
oParent.style.cssText="width:" + num*iPinW +"px;margin:0 auto;";
var compareArray = [];
//遍历获取到的所有瀑布流块
for (var i =0; i
if(i
//成行元素
compareArray[i] = aPin[i].offsetHeight;
}else{
//获取成行元素中高度最低的值
var minHeight = Math.min.apply('',compareArray);
//alert(compareArray + ",min=" + minHeight);
//获取成行元素中高度最低元素的索引
var minHkey =getMinHeightKey(compareArray,minHeight);
//为新增的瀑布流块设置定位
aPin[i].style.position ="absolute";
aPin[i].style.top = minHeight +"px";
//设定新增加的瀑布流块的top和left
aPin[i].style.left =aPin[minHkey].offsetLeft +"px";
//将该索引位置的高度改变为新增后的高度[原来瀑布流块的高度+新增的瀑布流块的高度]
compareArray[minHkey] += aPin[i].offsetHeight;
}
}
}
/**
* 获取parent下所有样式名为className的对象集合
*/
function getClassObject(parent,className){
var obj = parent.getElementsByTagName("*");
var result = [];
for(var i=0; i
//变量如果匹配className,将匹配的对象放入数组
if(obj[i].className==className){
result.push(obj[i]);
}
}
return result;
}
/**
* 获取arr数组中值为minH的值在数组中的索引
*/
function getMinHeightKey(arr,minH){
for(key in arr){
if(arr[key] == minH){
return key;
}
}
}
<style type="text/css">
/*设置每一个瀑布流块*/
#main .pin{
width:220px;
height:auto;
padding:15px 0px 0px 15px; /*上 右 下 左*/
float:left;
}
/*设置每一个瀑布流块中的图像样式*/
#main .pin .box{
width:200px;
height:auto;
padding:10px;
background:#FFF;
border:1px solid #ccc;
box-shadow:0px 0px 6px #ccc; /*中间投影*/
border-radius:5px; /*圆角*/
}
#main .pin .box img{
width:200px;
}
<div id="main">
<div >
<div >
<img src="images/1.webp">
<div >
<div >
<img src="images/2.webp">
<div >
<div >
<img src="images/3.webp">
<div >
<div >
<img src="images/4.webp">
<div >
<div >
<img src="images/5.webp">
<div >
<div >
<img src="images/6.webp">
<div >
<div >
<img src="images/7.webp">
</html>
最新回答共有5条回答
-
匿名用户
回复PHP CMS
思途CMS:适用于旅游行业的CMS系统,由四川思途智旅软件有限公司研发,基于LAMP架构,系统支持O2O模式、B2B模式、B2B2C模式、B2C模式等,其使用价值不限于这些模式在完善的系统基础上将系统的功能及可视化界面进行模块化,用户可根据自己的需求对系统进行模块化的安装使用,如:邮轮模块、供应商模块、分销模块等![2]都可进行无限的扩展,具有较强的灵活性,同时支持二次开发,系统无加密,可每周更新,同时也可自行按照官方提供的标准文档进行二次开发!系统嵌入了营销推广系统,营销推广系统包含了来源分析功能,网站地图自动生成,一键设置网页标题、关键词及描述,智能整站检测死链、关键词统计优化功能等。是已有旅游CMS系统的翘楚!同样也是业内 的标杆![3]
共4张
思途cms
五指CMS:基于php5 技术实现的一套高性能网站内容管理系统,默认支持pc网站和手机网站,能够自动识别用户客户端,给用户呈现不同的内容。模型功能首创共享模型/独立模型/相结合为不同的级别系统提供强有力的技术平台,数据库支持主从读写分离。
CmsTop:基于LAMP架构,融合文章/图集/视频/专题/页面/一键转载/编辑考核/活动报名/投票评选/全文搜索/个人专栏等功能,提供“PC网站+手机网站+手机客户端+平板客户端”多终端一体化媒体网站技术解决方案。
国微CMS:(原PHP168二代架构系统S系列)主打二代架构,主要在千万级数据负载、海量数据搜索方面具备核心优势,架构为核心+模块+插件方式,非常适合大型平台的使用。
织梦CMS是集实用、复杂、功能强大、安全、灵活、开源几大特点的开源内容管理系统,是国内开源CMS的领先品牌,系统并不简单。
e107:是一个内容管理系统采用PHP写成的,并使用流行的开源MySQL数据库系统的内容存储。 这是完全免费的,完全可定制的,并在不断发展,2007年最佳开源(PHP) cm
-
無畏
回复给你推荐4 个Netcore的开源项目,更多详细的介绍,见我之前分享的文章:
1、一个基于NetCore模块化、多租户CMS系统
2、一个基于NetCore开发的前后端分离CMS系统
3、一个基于NetCore可视化编辑CMS系统
4、一个基于.Net Core、Vue开发仿掘金的CMS开源系统
希望对您有帮助。
-
建站最低500起
回复这种瀑布流实现大体有两种方式,一种就是js的方式,一种是css,相对于js来说css的控制不是很好,不能自动加载之类的,只能显示一个瀑布流效果,大体的思路就是一个div里面放两个div分别浮动,高度自动,然后将图片分别放置到这两个div里面,这样就出现一个类似于瀑布流的效果了,当然了这个伪瀑布流的弊端就是如果一列的图片都是很高的,一列都是很矮的图片看着会很不协调。大体就是这个样子