成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

懶加載——網(wǎng)頁(yè)圖片的加載技術(shù)

raise_yang / 905人閱讀

摘要:首先,在頁(yè)面中準(zhǔn)備一個(gè)為的在這個(gè)中放一個(gè)中準(zhǔn)備了一些然而這些都有一個(gè)的屬性,準(zhǔn)備著圖片的地址,具體結(jié)構(gòu)如下圖片的動(dòng)態(tài)加載就是通過(guò)讀取元素,然后獲得元素的屬性的值賦予動(dòng)態(tài)創(chuàng)建的圖片的,從而實(shí)現(xiàn)了圖片的創(chuàng)建。

目前,網(wǎng)絡(luò)上各大論壇,尤其是一些圖片類型的網(wǎng)站上,在圖片加載時(shí)均采用了一種名為懶加載的方式,具體表現(xiàn)為,當(dāng)頁(yè)面被請(qǐng)求時(shí),只加載可視區(qū)域的圖片,其它部分的圖片則不加載,只有這些圖片出現(xiàn)在可視區(qū)域時(shí)才會(huì)動(dòng)態(tài)加載這些圖片,從而節(jié)約了網(wǎng)絡(luò)帶寬和提高了初次加載的速度,具體實(shí)現(xiàn)的技術(shù)并不復(fù)雜,下面分別對(duì)其說(shuō)明。
首先,在頁(yè)面中準(zhǔn)備一個(gè)id為div1的div,在這個(gè)div中放一個(gè)ul,ul中準(zhǔn)備了一些li,然而這些li都有一個(gè)data-src的屬性,準(zhǔn)備著圖片的地址,具體結(jié)構(gòu)如下:

圖片的動(dòng)態(tài)加載就是通過(guò)讀取li元素,然后獲得li元素的data-src屬性的值賦予動(dòng)態(tài)創(chuàng)建的圖片的src,從而實(shí)現(xiàn)了圖片的創(chuàng)建。

function setImg(index){
                var oDiv=document.getElementById("div1")
                var oUl=oDiv.children[0];
                var aLi=oUl.children;
                if (aLi[index].dataset) {
                    var src=aLi[index].dataset.src;
                } else{
                    var src=aLi[index].getAttribute("data-src");
                }
                var oImg=document.createElement("img");
                oImg.src=src;
                if (aLi[index].children.length==0) {
                    aLi[index].appendChild(oImg); 
                }
            }

那么怎么識(shí)別是否在可視區(qū)域呢?這里需要一個(gè)函數(shù),能夠?qū)崿F(xiàn)獲得當(dāng)前元素距離網(wǎng)頁(yè)頂部的距離!

//獲得對(duì)象距離頁(yè)面頂端的距離  
function getH(obj) {  
    var h = 0;  
    while (obj) {  
        h += obj.offsetTop;  
        obj = obj.offsetParent;  
    }  
    return h;  
}  

當(dāng)網(wǎng)頁(yè)的滾動(dòng)條滾動(dòng)時(shí)要時(shí)時(shí)判斷當(dāng)前l(fā)i的位置!

        window.onscroll = function () {
            var oDiv = document.getElementById("div1");
            var oUl = oDiv.children[0];
            var aLi = oUl.children;

            for (var i = 0, l = aLi.length; i < l; i++) {
                var oLi = aLi[i];
                //檢查oLi是否在可視區(qū)域
                var t = document.documentElement.clientHeight + (document.documentElement.scrollTop || document.body.scrollTop);
                var h = getH(oLi);
                if (h < t) {
                    setTimeout("setImg(" + i + ")", 500);
                }
            }
        };

當(dāng)頁(yè)面加載完成以后要主動(dòng)運(yùn)行一下window.onscroll,從而獲得當(dāng)前可視范圍內(nèi)的圖片

        window.onload = function () {
            window.onscroll();
        };

另外,像這樣的頁(yè)面,障眼法和美化都是必須的,比如給每個(gè)li一個(gè)loading的圖片作為背景,從而實(shí)現(xiàn)了當(dāng)前圖片正在加載的效果,美化工作就是做好合理的布局。

        * {
            margin: 0;
            padding: 0;
        }

        #div1 {
            width: 520px;
            margin: 30px auto;
            border: 1px solid red;
            overflow: hidden;
        }

        li {
            width: 160px;
            height: 160px;
            float: left;
            list-style: none;
            margin: 5px;
            background: url(loading.gif) center center no-repeat;
            border: 1px dashed green;
        }
        img{
        width:100%
        }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86084.html

相關(guān)文章

  • 加載和預(yù)加載

    摘要:使用默認(rèn)是對(duì)象,如果是是指使用標(biāo)簽,可以跨域,三懶加載和預(yù)加載的對(duì)比兩者都是提高頁(yè)面性能有效的辦法,兩者主要區(qū)別是一個(gè)是提前加載,一個(gè)是遲緩甚至不加載。懶加載對(duì)服務(wù)器前端有一定的緩解壓力作用,預(yù)加載則會(huì)增加服務(wù)器前端壓力。 一、懶加載 1.什么是懶加載 showImg(https://segmentfault.com/img/remote/1460000016666819); 懶加載也...

    appetizerio 評(píng)論0 收藏0
  • 加載和預(yù)加載

    摘要:使用默認(rèn)是對(duì)象,如果是是指使用標(biāo)簽,可以跨域,三懶加載和預(yù)加載的對(duì)比兩者都是提高頁(yè)面性能有效的辦法,兩者主要區(qū)別是一個(gè)是提前加載,一個(gè)是遲緩甚至不加載。懶加載對(duì)服務(wù)器前端有一定的緩解壓力作用,預(yù)加載則會(huì)增加服務(wù)器前端壓力。 一、懶加載 1.什么是懶加載 showImg(https://segmentfault.com/img/remote/1460000016666819); 懶加載也...

    Shonim 評(píng)論0 收藏0
  • 加載和預(yù)加載

    摘要:使用默認(rèn)是對(duì)象,如果是是指使用標(biāo)簽,可以跨域,三懶加載和預(yù)加載的對(duì)比兩者都是提高頁(yè)面性能有效的辦法,兩者主要區(qū)別是一個(gè)是提前加載,一個(gè)是遲緩甚至不加載。懶加載對(duì)服務(wù)器前端有一定的緩解壓力作用,預(yù)加載則會(huì)增加服務(wù)器前端壓力。 一、懶加載 1.什么是懶加載 showImg(https://segmentfault.com/img/remote/1460000016666819); 懶加載也...

    hedzr 評(píng)論0 收藏0
  • 函數(shù)節(jié)流和圖片加載

    摘要:然而,如果前一個(gè)定時(shí)器尚未執(zhí)行,其實(shí)就是替換為一個(gè)新的定時(shí)器,目的是只有在執(zhí)行函數(shù)的請(qǐng)求停止了一段時(shí)間后才執(zhí)行。首先清除之前設(shè)置的任何定時(shí)器,定時(shí)器是儲(chǔ)存在函數(shù)的屬性中的。 導(dǎo)讀 這篇文章中主要介紹一下函數(shù)節(jié)流,然后給了一個(gè)圖片懶加載的例子,說(shuō)圖片懶加載的時(shí)候順帶提了下怎么使用JS獲取頁(yè)面的寬高,卷上去的長(zhǎng)度等。參考來(lái)源主要是《JavaScript高級(jí)程序設(shè)計(jì)》。 函數(shù)節(jié)流 瀏覽器的D...

    smallStone 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<