zoukankan      html  css  js  c++  java
  • 瀑布流小节

    转载园子里的一位大神,但是找不到原文了。。。

    五大插件简介

    为了制作FineUI的《典型案例》页面,我们综合运用了Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox五大插件,下面先对这 5 个插件进行简单的介绍。

    1. Bootstrap:强大的CSS框架,由Twitter的开发工程师推出,不仅仅是960布局,而且包含很多很多拿来就用的漂亮样式。从Bootstrap推出第一个版本作者就开始使用,http://twitter.github.io/bootstrap/

    2. jQuery:JavaScript框架,业界事实的标准。http://jquery.com/

    3. Masonry:制作瀑布流布局的JavaScript库。http://masonry.desandro.com/

    4. imagesLoad:监测图片是否加载完毕的JavaScript库。https://github.com/desandro/imagesloaded

    5. Lightbox:以弹框形式集中展示图片的JavaScript库。http://lokeshdhakar.com/projects/lightbox2/

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>瀑布流布局</title>
    <style type="text/css">
    body{margin:0; font-family:微软雅黑;}
    #flow-box{margin:10px auto 0 auto; padding:0; position:relative}
    #flow-box li{
    190px; position:absolute; padding:10px; border:solid 1px #efefef; list-style:none;
    opacity:0;
    -moz-opacity:0;
    filter:alpha(opacity=0);
    -webkit-transition:opacity 500ms ease-in-out;
    -moz-transition:opacity 500ms ease-in-out;
    -o-transition:opaicty 500ms ease-in-out;
    transition:opaicty 500ms ease-in-out;}
    #flow-box li img{100%;}
    #flow-box li a{display:block; 100%; text-align:center; font-size:14px; color:#333; line-height:18px; margin-top:10px; text-decoration:none;}
    .loadwrap{position:absolute; left:0; 100%; text-align:center;}
    </style>
    <link href="css/rty.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <ul id="flow-box">
    <li><img src="http://www.mitxiong.com/NewsImages/2012121821504156.jpg" /><a href="#">图片标题1</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012112718241731.jpg" /><a href="#">图片标题2</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012111806582944.jpg" /><a href="#">图片标题3</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012110907231232.jpg" /><a href="#">图片标题4</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012110406319529.jpg" /><a href="#">图片标题5</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012101808066955.jpg" /><a href="#">图片标题6</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012101307276582.jpg" /><a href="#">图片标题7</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012082223432719.jpg" /><a href="#">图片标题8</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012082121509065.jpg" /><a href="#">图片标题9</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012081922387254.jpg" /><a href="#">图片标题10</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012081700252403.jpg" /><a href="#">图片标题11</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012081407597304.jpg" /><a href="#">图片标题12</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012081218248259.jpg" /><a href="#">图片标题13</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012080621278799.jpg" /><a href="#">图片标题14</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012072907484455.jpg" /><a href="#">图片标题15</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012072521564314.jpg" /><a href="#">图片标题16</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012072507238259.jpg" /><a href="#">图片标题17</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012072409035684.jpg" /><a href="#">图片标题18</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012072219405236.jpg" /><a href="#">图片标题19</a></li>
    <li><img src="http://www.mitxiong.com/NewsImages/2012071218416980.jpg" /><a href="#">图片标题20</a></li>
    </ul>
    <div id="loadimg" class="loadwrap"><img src="Images/load.jpg" /></div>
    <script type="text/javascript">
    function flow(mh, mv) {//参数mh和mv是定义数据块之间的间距,mh是水平距离,mv是垂直距离
    var w = document.documentElement.offsetWidth;//计算页面宽度
    var ul = document.getElementById("flow-box");
    var li = ul.getElementsByTagName("li");
    var iw = li[0].offsetWidth + mh;//计算数据块的宽度
    var c = Math.floor(w / iw);//计算列数
    ul.style.width = iw * c - mh + "px";//设置ul的宽度至适合便可以利用css定义的margin把所有内容居中

    var liLen = li.length;
    var lenArr = [];
    for (var i = 0; i < liLen; i++) {//遍历每一个数据块将高度记入数组
    lenArr.push(li[i].offsetHeight);
    }

    var oArr = [];
    for (var i = 0; i < c; i++) {//把第一行排放好,并将每一列的高度记入数据oArr
    li[i].style.top = "0";
    li[i].style.left = iw * i + "px";
    li[i].style.opacity = "1";
    li[i].style["-moz-opacity"] = "1";
    li[i].style["filter"] = "alpha(opacity=100)";
    oArr.push(lenArr[i]);
    }

    for (var i = c; i < liLen; i++) {//将其他数据块定位到最短的一列后面,然后再更新该列的高度
    var x = _getMinKey(oArr);//获取最短的一列的索引值
    li[i].style.top = oArr[x] + mv + "px";
    li[i].style.left = iw * x + "px";
    li[i].style.opacity = "1";
    li[i].style["-moz-opacity"] = "1";
    li[i].style["filter"] = "alpha(opacity=100)";
    oArr[x] = lenArr[i] + oArr[x] + mv;//更新该列的高度
    }
    document.getElementById("loadimg").style.top = _getMaxValue(oArr) + 50 + "px";//将loading移到下面

    function scroll() {//滚动加载数据
    var st = oArr[_getMinKey(oArr)];
    var scrollTop = document.documentElement.scrollTop > document.body.scrollTop? document.documentElement.scrollTop : document.body.scrollTop;
    if (scrollTop >= st - document.documentElement.clientHeight) {
    window.onscroll = null;//为防止重复执行,先清除事件
    _request(null, "GetList.php", function(data) {//当滚动到达最短的一列的距离时便发送ajax请求新的数据,然后执行回调函数
    _addItem(data.d, function() {//追加数据
    var liLenNew = li.length;
    for(var i = liLen; i < liLenNew; i++) {
    lenArr.push(li[i].offsetHeight);
    }
    for(var i = liLen; i < liLenNew; i++) {
    var x = _getMinKey(oArr);
    li[i].style.top = oArr[x] + 10 + "px";
    li[i].style.left = iw * x + "px";
    li[i].style.opacity = "1";
    li[i].style["-moz-opacity"] = "1";
    li[i].style["filter"] = "alpha(opacity=100)";
    oArr[x] = lenArr[i] + oArr[x] + 10;
    }
    document.getElementById("loadimg").style.top = _getMaxValue(oArr) + 50 + "px";//loading向下移位
    liLen = liLenNew;
    window.onscroll = scroll;//执行完成,恢愎onscroll事件
    });
    })
    }
    }
    window.onscroll =scroll;
    }
    //图片加载完成后执行
    window.onload = function() {flow(10, 10)};
    //改变窗口大小时重新布局
    var re;
    window.onresize = function() {
    clearTimeout(re);
    re = setTimeout(function() {flow(10, 10);}, 200);
    }
    //追加项
    function _addItem(arr, callback) {
    var _html = "";
    var a = 0;
    var l = arr.length;
    (function loadimg() {
    var img = new Image();
    img.onload = function() {
    a += 1;
    if (a == l) {
    for (var k in arr) {
    var img = new Image();
    img.src = arr[k].img;
    _html += '<li><img src="' + arr[k].img + '" /><a href="#">' + arr[k].title + '</a></li>';
    }
    _appendhtml(document.getElementById("flow-box"), _html);
    callback();
    }
    else {
    loadimg();
    }
    }
    img.src = arr[a].img;
    })()
    }
    //ajax请求
    function _request(reqdata, url, callback) {
    var xmlhttp;
    if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
    }
    else {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    var data = eval("(" + xmlhttp.responseText + ")");
    callback(data);
    }
    }
    xmlhttp.open("POST", url);
    xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    xmlhttp.send(reqdata);
    }
    //追加html
    function _appendhtml(parent, child) {
    if (typeof (child) == "string") {
    var div = document.createElement("div");
    div.innerHTML = child;
    var frag = document.createDocumentFragment();
    (function() {
    if (div.firstChild) {
    frag.appendChild(div.firstChild);
    arguments.callee();
    }
    else {
    parent.appendChild(frag);
    }
    })();
    }
    else {
    parent.appendChild(child);
    }
    }
    //获取数字数组的最大值
    function _getMaxValue(arr) {
    var a = arr[0];
    for (var k in arr) {
    if (arr[k] > a) {
    a = arr[k];
    }
    }
    return a;
    }
    //获取数字数组最小值的索引
    function _getMinKey(arr) {
    var a = arr[0];
    var b = 0;
    for (var k in arr) {
    if (arr[k] < a) {
    a = arr[k];
    b = k;
    }
    }
    return b;
    }
    </script>
    </body>
    </html>

  • 相关阅读:
    有个名字叫随便乱记——css3
    CSS3伸缩布局
    路政整理
    GIst
    SVN回滚版本
    你需要知道的CSS3 动画技术
    iScroll框架的使用和修改
    CSS3阴影 box-shadow的使用和技巧总结
    Javascript异步编程的4种方法
    zepto学习零碎
  • 原文地址:https://www.cnblogs.com/dingyufenglian/p/4350714.html
Copyright © 2011-2022 走看看