이 문서의 예에서는 Jquery가 폭포 흐름 레이아웃을 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 내용은 다음과 같습니다.
폭포 흐름 레이아웃은 최근에 많은 사람들이 저처럼 만드는 방법을 알고 싶어합니다. 인터넷에서 많은 참고 자료를 검색하고 N면을 실험한 끝에 오늘 마침내 작성했습니다. 저는 jQuery를 사용했습니다(물론 소스 js 코드를 사용하면 효율성이 높아지겠지만 소스 js에 능숙하지 않은 사람들이 많습니다).
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Jquery瀑布流布局(每行代码都有详细注释)-作者:刘晓帆</title> <style type="text/css"> body, ul, li, h3 { margin: 0; padding: 0; list-style: none; font: bold 12px "微软雅黑"; } /*瀑布流布局样式*/ #lxf-box { position: relative; } #lxf-box li { position: absolute; background: #fff; border: solid 1px #ccc; text-align: center; padding: 10px; left: 0px; top: 0; } h3 { padding-top: 8px; } img { width: 200px; height: auto; display: block; border: 0 } /*css3动画*/ li { -webkit-transition: all .7s ease-out .1s; -moz-transition: all .7s ease-out; -o-transition: all .7s ease-out .1s; transition: all .7s ease-out .1s } </style> <script src="/js/jquery-1.6.4.min.js" type="text/javascript"></script> </head> <body> <ul id="lxf-box"> <li><a href="/"><img src="/demo/waterfall/OLqypfV.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/msbvKWyQQzZuZy.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/WbWXwqpcxqcued.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/rabGVkIGq.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/rSmEiZGlAvvuZ.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/YewRtz.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/STVDndiZsIduZyLv.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/mWFuVrzCzpPdzdje.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/MsZvAyOFukxdzdjefXwi.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/OEycuedk.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/YwabRquVKrxd.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/+nwbuJpc.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/qymffF.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/DvKZdxCjtfqMv.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/SOmyOQZtlUfdzdjefXwi.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/REsUNXUvAkrdzdj.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/DQJwrFnDpgtdz.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/eJupzWlGPxz.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/IWpjipjp.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/OXsDgKacJeTdzdjefXwi.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/QPIzxiMkmlHdzdjefX.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/mrTNaJTaQyluZyLvvnWS.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/mqXLNuWiPrbdz.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/MiEJRJdimxPdzdjefXw.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/CczowVxqM.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/rabGVkIGq.jpg"></a> <h3>图片标题</h3> </li> <li><a href="/"><img src="/demo/waterfall/zwPqjasxHYvdz.jpg"></a> <h3>图片标题</h3> </li> </ul> <script> /* 原理: 1.把所有的li的高度值放到数组里面 2.第一行的top都为0 3.计算高度值最小的值是哪个li 4.把接下来的li放到那个li的下面 */ var margin = 10;//这里设置间距 var li=$("li");//这里是区块名称 var li_W = li[0].offsetWidth+margin; //取区块的实际宽度(包含间距,这里使用源生的offsetWidth函数,不适用jQuery的width()函数是因为它不能取得实际宽度,例如元素内有pandding就不行了) function liuxiaofan(){//定义成函数便于调用 var h=[];//记录区块高度的数组 var n = document.documentElement.offsetWidth/li_W|0; //窗口的宽度除以区块宽度就是一行能放几个区块 for(var i = 0;i < li.length;i++) {//有多少个li就循环多少次 li_H = li[i].offsetHeight;//获取每个li的高度 if(i < n) {//n是一行最多的li,所以小于n就是第一行了 h[i]=li_H;//把每个li放到数组里面 li.eq(i).css("top",0);//第一行的Li的top值为0 li.eq(i).css("left",i * li_W); //第i个li的左坐标就是i*li的宽度 } else{ min_H =Math.min.apply(null,h) ;//取得数组中的最小值,区块中高度值最小的那个 minKey = getarraykey(h, min_H);//最小的值对应的指针 h[minKey] += li_H+margin ;//加上新高度后更新高度值 li.eq(i).css("top",min_H+margin);//先得到高度最小的Li,然后把接下来的li放到它的下面 li.eq(i).css("left",minKey * li_W); //第i个li的左坐标就是i*li的宽度 } $("h3").eq(i).text("编号:"+i+",高度:"+li_H);//把区块的序号和它的高度值写入对应的区块H3标题里面 } } /* 使用for in运算返回数组中某一值的对应项数(比如算出最小的高度值是数组里面的第几个) */ function getarraykey(s, v) {for(k in s) {if(s[k] == v) {return k;}}} /*这里一定要用onload,因为图片不加载完就不知道高度值*/ window.onload = function() {liuxiaofan();}; /*浏览器窗口改变时也运行函数*/ window.onresize = function() {liuxiaofan();}; </script> </body> </html>
이 기사가 모든 사람의 jquery 프로그래밍 설계에 도움이 되기를 바랍니다.