1.建立Html模板。
想法是先用一个div容器承载所有内容,然后用div框放置图片,最后用div box_border作为图片框。代码如下。
!键入htmlhearteta charset=' utf-8 ' title瀑布流/title/headsdydiv class=' container ' id=' container ' div class=' box _ border ' id=' box _ border ' div class=' box ' id=' box 1 ' img src=' http :-制作Box的多个副本,这里省略是因为重复的code-/div/div/body/html效果:(没有设置css属性,所以都是垂直放置)。
2.只需通过css设置样式。
主要设置横向摆放、相框颜色、边界等。
/*边界不留白,背景为黑灰色*/body { margin : 0px;背景:暗灰色;}/*总布局设置为相对布局*/。容器{位置:相对;}/*设置框属性*/。box { padding: 5px向左浮动:}/*设置图片边框的阴影和圆角*/。box _ border { padding: 5pxborder: 1px固体# ccccccbox-shadow : 0px 0px 5px # CCC;border-radius : 5px;}/*设置图片格式*/。box _ border rimg { width : 150 px;height: auto}效果:(一切都被框住了)。
3.JS控制每行中放置的图片数量。
在上面的css布局之后,浏览器窗口的大小会改变,其中的图片数量也会改变。现在用JS来固定每行的图片数量,对于不同大小的屏幕都可以达到很好的效果。
/*用于加载其他函数*/window . onload=function(){ setimglocation(' container ');}/*设置图片数量*/函数setimglocation(parent){ var c parent=document . getelementbyid(parent);//获取父节点varchildarray=getchildnodes(CP parent);//获取图片数var imgwidth=childarray [0]。偏移;//获取照片宽度var屏幕宽度=document . document element . client width;//获取浏览器宽度var count=math . floor(screen width/imgwidth);//每行的个数CP parent . style . CSS text=' width : ' count * imgwidth ' px;margin: 0 auto';//设置其宽度并居中}/*获取所有图片的数量*/函数获取子节点(父){var子数组=[];//定义一个数组来存储图片框var temp nodes=parent . getelementsbytagname(' * ');//获取父节点下的所有节点//循环添加类为box的(var i=0)的节点;itempNodes.lengthi ){if(tempNodes[i])。class name=' box '){ childarray . push(tempNodes[I]);} }返回childArray//返回所有子节点}不同屏幕尺寸显示的渲染:数量不同。
4.JS实现静态瀑布流。
首先实现静态布局,即浏览器下拉不会自动刷新新图片。
实现置换算法非常简单。
1.保存数组2中第一行图片的所有高度。计算第一行3中图片的最小高度和对应位置。将第一张图片放在这个位置4的第一行之后。将此位置的高度重置为两张图片的总和5。环路2。留下所有的照片。
代码:
/*用于加载其他函数*/window . onload=function(){ setimglocation(' container ');}/*设置图片的数量和位置*/函数setimglocation(parent){ var c parent=document . getelementbyid(parent);//获取父节点varchildarray=getchildnodes(CP parent);//获取图片数var imgwidth=childarray [0]。偏移;//获取照片宽度var屏幕宽度=document . document element . client width;//获取浏览器宽度var count=math . floor(screen width/imgwidth);//每行的个数CP parent . style . CSS text=' width : ' count * imgwidth ' px;margin: 0 auto';//设置其宽度并居中//定义一个数组,存储第一行照片,高度vari mg array=[];//循环浏览图片(var I=0;ichildArray.lengthI ){//如果图片在第一行,得到高度if(I count){ imgharray[I]=child array[I]。偏右;}else//否则用最小高度{ var min haut=math . min . apply(null,img数组)填充剩余图片;//获取最小高度varminindex=getminindex(min have,imgharray);//获取下标childarray [I]。风格。位置='绝对'对应最小高度;//设置要填充的图片框为绝对布局,否则位置childarray [I]。无法更改style . top=min h8“px”;//设置childarray [I]。风格。left=childarray [minindex]。offsetleft ' px//设置要填充图片的左边高度。imgharray[mini dex]=child array[I]。偏右;//填充后将当前位置的高度设置为两张图片之和//开始下一个循环}}/*获取最小高度对应的下标*/Function getMinindex(Minh have,imgh array){ For(imgh array中的var I){ If(imgh array[I]==Minh have){ Return I;}}}/*获取所有图片的数量*/函数获取子节点(父){var子数组=[];//定义一个数组来存储图片框var temp nodes=parent . getelementsbytagname(' * ');//获取父节点下的所有节点//循环添加类为box的(var i=0)的节点;itempNodes.lengthi ){if(tempNodes[i])。class name=' box '){ childarray . push(tempNodes[I]);} }返回childArray//返回所有子节点}效果:
5.js实现动态加载。
动态加载意味着滚动条永远不会滑到底部。要解决动载荷,我们需要考虑两个问题。
1.什么时候装?
幻灯片浏览器高度处距最后一张图片顶部的距离。
2.如何加载?
通过创建新节点,添加创建的节点。
最终代码:
/*范文范文范文*/窗口。onload=function(){ var CP parent=document。getelement byid(' container ');//阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉setmglocation(CP parent);//吴亚玲吴亚玲var data=['image/01.jpg ',' image/02.jpg ',' image/03.jpg ',' image/04.jpg ',' image/05.jpg ',' image/06.jpg ',' image/07.jpg ',' image/08.jpg ',' image/09.jpg ',' image/11.jpg ',' image/12.jpg ',' image/13.jpg ',' image/14.jpg ',' image/15.jpg ',' image/16.jpg 'jpg '];//朱庇特先生窗户。onscroll=function(){ if(check load(CP parent)){ for(var I=0);数据。长度(i ) {//嗨!嗨!嗨var div 1=文档。创建元素(' div '):div 1。boxvar div 2=文档.创建元素(' div '):div 2。box _ bordervar img=document .创建元素(' img ');img.className=.box _边框img方块边界img:img.src=日期[一];第二分区。追加子级(img);1区。追加子级(div 2);cparent。追加子代(div 1);} setmglocation(CP parent);//嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨,嗨}}}/*吴亚玲吴亚玲*/function check load(CP parent){ var child array=get子节点(CP parent);//阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉var lastmghight=子数组[子数组。长度-1].offsettop/你好你好你好var滚动高度=文档。文档元素。向上滚动| |文档。尸体。滚动顶部;//范仲淹(范登韦恩佐范登韦恩佐)var浏览器高度=文档。文档元素。客户端高度://范思哲范思哲if(lastmghigh滚动高度浏览器高度){//你好你好返回true} else {返回false}/*胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明,胡志明*/function setmglocation(CP parent){ var子数组=get子节点(CP parent);//阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉var imgWidth=childArray[0].偏移宽度;//范仲淹var浏览器宽度=文档。文档元素。客户端宽度://范纯平(音译)var count=Math.floor(浏览器宽度/imgWidth)://绿筠小姐cparent。风格。CSS text=' width 3360 ' count * img width ' px;利润:汽车;";//云娥//是郑晓雨同学,你是谁var img haray=[]://490贺盛瑞贺盛瑞阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉阿吉S7-1200可编程控制器:ichildarray。长度(i ){//喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂,喂if(icumount){ img haray[I]=子数组[I].偏移高度;}else//不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不{ var minhAiR=Math . min . apply(空值,img haray);//范希洛阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿凡阿var miniindex=getminiindex(最小高度,img haray);//范仲淹?范仲淹子数组[I]。风格。位置='绝对';//范登韦恩佐韦恩佐韦恩佐韦恩佐韦恩佐韦恩佐,吴亚玲吴亚玲吴亚玲子数组[I]。风格。top=我的身高‘px’;//范仲淹!范仲淹!范仲淹!范仲淹子数组[I]。风格。left=子数组[miniindex].offsetleft ' px//范仲淹!范仲淹!范仲淹!范仲淹img haray[mini index]=子数组[I].偏移高度;//不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不//安徒生安徒生安徒生}}}/*范仲淹?范仲淹*/function getmnindex(最小高度,img haray){ for(var I in img haray){ if(img haray[I]==最小高度){ return I;}}}/*范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹*/函数获取子节点(父){ var子数组=[]://是云娥吗box var tempnodes=parent。get element sbytname(' * ');//范琼?范琼//芳卿曰类吾曰盒子!盒子绿筠for(var I=0);itempNodes.length:(i ){if(时间节点[i]).类名==' box ' {子数组。推送(时间节点[I]);} }返回子数组;//阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云见阿云}阿九: