最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js實現(xiàn)瀑布流的一種簡單方法實例分享

 更新時間:2013年11月04日 16:25:37   作者:  
現(xiàn)在說瀑布流式布局似乎有點晚了,但是每一項技術(shù)都是向著“精”和“簡”的方向在不斷發(fā)展,在發(fā)展到極致之前,需要一個相當漫長的過程,因此,從這個角度來說,當瀑布流被應用得越來越多的時候,反而更應該討論它,討論如何將它改善

下面奉上一則用JS實現(xiàn)瀑布流的方法,望批評。

復制代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>瀑布流布局測試</title>
<style>
body {
    background-color: #eee;
    font-size: 84%;
    text-align: justify;
}
.column {
    display: inline-block;
    vertical-align: top;
}
.pic_a {
    display: block;
    padding: 5px;
    margin-bottom: 10px;
    border: 1px solid #ccc;
    background-color: #fff;
    text-decoration: none;
}
.pic_a img {
    display: block;
    margin: 0 auto 5px;
    border: 0;
    vertical-align: bottom;
}
.pic_a strong {
    color: #333;
}
</style>
</head>

<body>
<div id="container"></div>
<script>
var waterFall = {
    container: document.getElementById("container"),
    columnNumber: 1,
    columnWidth: 210,
    // P_001.jpg ~ P_160.jpg
    rootImage: "test/",
    indexImage: 0,

    scrollTop: document.documentElement.scrollTop || document.body.scrollTop,
    detectLeft: 0,

    loadFinish: false,

    // 返回固定格式的圖片名
    getIndex: function() {
        var index = this.indexImage;
        if (index < 10) {
            index = "00" + index;   
        } else if (index < 100) {
            index = "0" + index;   
        }
        return index;
    },

    // 是否滾動載入的檢測
    appendDetect: function() {
        var start = 0;
        for (start; start < this.columnNumber; start++) {
            var eleColumn = document.getElementById("waterFallColumn_" + start);
            if (eleColumn && !this.loadFinish) {
                if (eleColumn.offsetTop + eleColumn.clientHeight < this.scrollTop + (window.innerHeight || document.documentElement.clientHeight)) {
                    this.append(eleColumn);
                }
            }           
        }

        return this;
    },

    // 滾動載入
    append: function(column) {
        this.indexImage += 1;
        var html = '', index = this.getIndex(), imgUrl = this.rootImage + "P_" + index + ".jpg";

        // 圖片尺寸
        var aEle = document.createElement("a");
        aEle.href = "###";
        aEle.className = "pic_a";
        aEle.innerHTML = '<img src="'+ imgUrl +'" /><strong>'+ index +'</strong>';
        column.appendChild(aEle);

        if (index >= 160) {
            //alert("圖片加載光光了!");
            this.loadFinish = true;
        }

        return this;
    },

    // 頁面加載初始創(chuàng)建
    create: function() {
        this.columnNumber = Math.floor(document.body.clientWidth / this.columnWidth);

        var start = 0, htmlColumn = '', self = this;
        for (start; start < this.columnNumber; start+=1) {
            htmlColumn = htmlColumn + '<span id="waterFallColumn_'+ start +'" class="column" style="width:'+ this.columnWidth +'px;">'+
                function() {
                    var html = '', i = 0;
                    for (i=0; i<5; i+=1) {
                        self.indexImage = start + self.columnNumber * i;
                        var index = self.getIndex();
                        html = html + '<a href="###" class="pic_a"><img src="'+ self.rootImage + "P_" + index +'.jpg" /><strong>'+ index +'</strong></a>';
                    }
                    return html;   
                }() +
            '</span> ';   
        }
        htmlColumn += '<span id="waterFallDetect" class="column" style="width:'+ this.columnWidth +'px;"></span>';

        this.container.innerHTML = htmlColumn;

        this.detectLeft = document.getElementById("waterFallDetect").offsetLeft;
        return this;
    },

    refresh: function() {
        var arrHtml = [], arrTemp = [], htmlAll = '', start = 0, maxLength = 0;
        for (start; start < this.columnNumber; start+=1) {
            var arrColumn = document.getElementById("waterFallColumn_" + start).innerHTML.match(/<a(?:.|\n|\r|\s)*?a>/gi);
            if (arrColumn) {
                maxLength = Math.max(maxLength, arrColumn.length);
                // arrTemp是一個二維數(shù)組
                arrTemp.push(arrColumn);
            }
        }

        // 需要重新排序
        var lengthStart, arrStart;
        for (lengthStart = 0; lengthStart<maxLength; lengthStart++) {
            for (arrStart = 0; arrStart<this.columnNumber; arrStart++) {
                if (arrTemp[arrStart][lengthStart]) {
                    arrHtml.push(arrTemp[arrStart][lengthStart]);   
                }
            }   
        }

       
        if (arrHtml && arrHtml.length !== 0) {
            // 新欄個數(shù)       
            this.columnNumber = Math.floor(document.body.clientWidth / this.columnWidth);

            // 計算每列的行數(shù)
            // 向下取整
            var line = Math.floor(arrHtml.length / this.columnNumber);

            // 重新組裝HTML
            var newStart = 0, htmlColumn = '', self = this;
            for (newStart; newStart < this.columnNumber; newStart+=1) {
                htmlColumn = htmlColumn + '<span id="waterFallColumn_'+ newStart +'" class="column" style="width:'+ this.columnWidth +'px;">'+
                    function() {
                        var html = '', i = 0;
                        for (i=0; i<line; i+=1) {
                            html += arrHtml[newStart + self.columnNumber * i];
                        }
                        // 是否補足余數(shù)
                        html = html + (arrHtml[newStart + self.columnNumber * line] || '');

                        return html;   
                    }() +
                '</span> ';   
            }
            htmlColumn += '<span id="waterFallDetect" class="column" style="width:'+ this.columnWidth +'px;"></span>';

            this.container.innerHTML = htmlColumn;

            this.detectLeft = document.getElementById("waterFallDetect").offsetLeft;

            // 檢測
            this.appendDetect();
        }
        return this;
    },

    // 滾動加載
    scroll: function() {
        var self = this;
        window.onscroll = function() {
            // 為提高性能,滾動前后距離大于100像素再處理
            var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
            if (!this.loadFinish && Math.abs(scrollTop - self.scrollTop) > 100) {
                self.scrollTop = scrollTop;
                self.appendDetect();   
            }

        };
        return this;
    },

    // 瀏覽器窗口大小變換
    resize: function() {
        var self = this;
        window.onresize = function() {
            var eleDetect = document.getElementById("waterFallDetect"), detectLeft = eleDetect && eleDetect.offsetLeft;
            if (detectLeft && Math.abs(detectLeft - self.detectLeft) > 50) {
                // 檢測標簽偏移異常,認為布局要改變
                self.refresh();   
            }
        };
        return this;
    },
    init: function() {
        if (this.container) {
            this.create().scroll().resize();   
        }
    }
};
waterFall.init();
</script>
</body>
</html>

相關(guān)文章

  • JavaScript 九種跨域方式實現(xiàn)原理

    JavaScript 九種跨域方式實現(xiàn)原理

    這篇文章主要介紹了JavaScript 九種跨域方式實現(xiàn)原理,什么是跨域,以及有哪幾種跨域方式,這是本文要探討的內(nèi)容。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • 原生js實現(xiàn)拼圖效果

    原生js實現(xiàn)拼圖效果

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)拼圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 很棒的一組js圖片輪播特效

    很棒的一組js圖片輪播特效

    這篇文章主要為大家分享了一款很棒的js組輪播特效,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 移動web開發(fā)之touch事件實例詳解

    移動web開發(fā)之touch事件實例詳解

    下面小編就為大家分享一篇移動web開發(fā)之touch事件實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 微信小程序canvas.drawImage完全顯示圖片問題的解決

    微信小程序canvas.drawImage完全顯示圖片問題的解決

    這篇文章主要介紹了微信小程序canvas.drawImage完全顯示圖片問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 一次微信小程序內(nèi)地圖的使用實戰(zhàn)記錄

    一次微信小程序內(nèi)地圖的使用實戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于一次微信小程序內(nèi)地圖使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用微信小程序具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • JS 實現(xiàn)列表與多選框選擇附預覽動畫

    JS 實現(xiàn)列表與多選框選擇附預覽動畫

    本節(jié)為大家介紹的是用JS實現(xiàn)列表與多選框選擇,并附gif演示動畫,這個例子很詳細,大家可以看看
    2014-10-10
  • 深入淺析search 搜索框的寫法

    深入淺析search 搜索框的寫法

    本文以京東搜索框為例給大家淺析search 搜索框的寫法,本文介紹的非常不錯,需要的朋友可以參考下
    2016-08-08
  • JavaScript文本特效實例小結(jié)【3個示例】

    JavaScript文本特效實例小結(jié)【3個示例】

    這篇文章主要介紹了JavaScript文本特效,結(jié)合3個實例分析了javascript基于定時器的文字動態(tài)操作特效相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-12-12
  • 深入理解JavaScript Promise鏈式調(diào)用與錯誤處理機制

    深入理解JavaScript Promise鏈式調(diào)用與錯誤處理機制

    在JavaScript的異步編程中,Promise是一個非常重要的概念,它允許我們以鏈式的方式處理異步操作,使得代碼更加清晰和易于管理,本文將通過一系列代碼示例,深入探討Promise的鏈式調(diào)用和錯誤處理機制,需要的朋友可以參考下
    2024-09-09

最新評論

报价| 巧家县| 高陵县| 雷山县| 安乡县| 游戏| 专栏| 祥云县| 资兴市| 新竹县| 萝北县| 浦城县| 双江| 广东省| 镇原县| 永泰县| 明溪县| 潢川县| 拜泉县| 定安县| 芒康县| 洪泽县| 阿坝| 松阳县| 广平县| 晋江市| 麻阳| 青冈县| 阿图什市| 蕲春县| 镇平县| 旌德县| 大理市| 东城区| 千阳县| 邯郸县| 固始县| 木里| 大洼县| 临猗县| 盐源县|