中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      jquery lazyload延遲加載的實現原理分析

      時間:2024-09-09 01:33:59 jQuery 我要投稿
      • 相關推薦

      jquery lazyload延遲加載的實現原理分析

        前言

        懶加載技術(簡稱lazyload)并不是新技術,它是js程序員對網頁性能優化的一種方案。lazyload的核心是按需加載。在大型網站中都有lazyload的身影,例如谷歌的圖片搜索頁,迅雷首頁,淘寶網,QQ空間等。因此掌握lazyload技術是個不錯的選擇,可惜jquery插件lazy load官網(http://www.appelsiini.net/projects/lazyload)稱不支持新版瀏覽器。

        lazyload在什么場合中應用比較合適?

        涉及到圖片,falsh資源,iframe,網頁編輯器(類似FCK)等占用較大帶寬,且這些模塊暫且不在瀏覽器可視區內,因此可以使用lazyload在適當的時候加載該類資源。避免網頁打開時加載過多資源,讓用戶等待太久。

        如何實現lazyload?

        lazyload的難點在如何在適當的時候加載用戶需要的資源(這里用戶需要的資源指該資源呈現在瀏覽器可視區域)。因此我們需要知道幾點信息來確定目標是否已呈現在客戶區,其中包括:

        可視區域相對于瀏覽器頂端位置; 待加載資源相對于瀏覽器頂端位置。

        在得到以上兩點數據后,通過如下函數,便可得出某對象是否在瀏覽器可視區域了。

        返回瀏覽器的可視區域位置

        復制代碼 代碼如下:

        // 返回瀏覽器的可視區域位置

        function getClient(){

        var l, t, w, h;

        l = document.documentElement.scrollLeft || document.body.scrollLeft;

        t = document.documentElement.scrollTop || document.body.scrollTop;

        w = document.documentElement.clientWidth;

        h = document.documentElement.clientHeight;

        return { left: l, top: t, width: w, height: h };

        }

        返回待加載資源位置

        復制代碼 代碼如下:

        // 返回待加載資源位置

        function getSubClient(p){

        var l = 0, t = 0, w, h;

        w = p.offsetWidth;

        h = p.offsetHeight;

        while(p.offsetParent){

        l += p.offsetLeft;

        t += p.offsetTop;

        p = p.offsetParent;

        }

        return { left: l, top: t, width: w, height: h };

        }

        其中 函數getClient()返回瀏覽器客戶區區域信息,getSubClient()返回目標模塊區域信息。此時確定目標模塊是否出現在客戶區實際上是確定如上兩個矩形是否相交。

        復制代碼 代碼如下:

        // 判斷兩個矩形是否相交,返回一個布爾值

        function intens(rec1, rec2){

        var lc1, lc2, tc1, tc2, w1, h1;

        lc1 = rec1.left + rec1.width / 2;

        lc2 = rec2.left + rec2.width / 2;

        tc1 = rec1.top + rec1.height / 2 ;

        tc2 = rec2.top + rec2.height / 2 ;

        w1 = (rec1.width + rec2.width) / 2 ;

        h1 = (rec1.height + rec2.height) / 2;

        return Math.abs(lc1 - lc2) < w1 && Math.abs(tc1 - tc2) < h1 ;

        }

        現在基本上可以實現延時加載了,接下來,我們在window.onscroll事件中編寫一些代碼監控目標區域是否呈現在客戶區。

        復制代碼 代碼如下:

        復制代碼 代碼如下:

        var div1 = document.getElementById("div1");

        window.onscroll = function(){

        var prec1 = getClient();

        var prec2 = getSubClient(div1);

        if (intens(prec1, prec2)) {

        alert("true");

        }

        };

        我們只需要在彈出窗口的地方加載我們需要的資源。

        這里值得注意的是 : 目標對象呈現在客戶區域時,會隨著滾動而不斷的彈出窗口。因此我們需要在彈出第一個窗口后取消對該區域的監測,這里用一個數組來收集需要監測的對象,同時將監測的邏輯抽出來。同時需要注意 onscroll事件和onresize事件都會改變游覽器可視區域信息,因此在該類事件觸發后需要重新計算,這里用autocheck()函數實現。

        增加元素 :

        復制代碼 代碼如下:

        復制代碼 代碼如下:

        // 比較某個子區域是否呈現在瀏覽器區域

        function jiance(arr, prec1, callback){

        var prec2;

        for (var i = arr.length - 1; i >= 0; i--) {

        if (arr[i]) {

        prec2 = getSubClient(arr[i]);

        if (intens(prec1, prec2)) {

        callback(arr[i]);

        // 加載資源后,刪除監測

         arr[i];

        }

        }

        }

        }

        復制代碼 代碼如下:

        // 檢測目標對象是否出現在客戶區

        function autocheck(){

        var prec1 = getClient();

        jiance(arr, prec1, function(obj){

        // 加載資源...

        alert(obj.innerHTML);

        })

        }

        // 子區域一

        var d1 = document.getElementById("d1");

        // 子區域二

        var d2 = document.getElementById("d2");

        // 需要按需加載區域集合

        var arr = [d1, d2];

        window.onscroll = function(){

        // 重新計算

        autocheck();

        }

        window.onresize = function(){

        // 重新計算

        autocheck();

        }

      【jquery lazyload延遲加載的實現原理分析】相關文章:

      關于jQuery實現高亮顯示的方法介紹08-20

      jQuery 源碼分析和Ready函數06-28

      微軟Windows 7系統開機加載過程的原理和機制05-18

      探討PHP函數的實現原理及性能07-07

      php中session的實現原理以及大網站應用應注意的問題分析07-26

      關jQuery彈出窗口簡單實現代碼-javascript編程06-07

      關于jquery簡單圖片切換顯示效果實現方法介紹10-01

      營銷策略相關原理分析10-10

      執行sql原理l分析05-12

      關于php堆排序實現原理與應用方法10-09

      主站蜘蛛池模板: 亚洲av永久青草无码精品| 精品少妇人妻久久免费| 国产精品一区二区三区不卡| 第九色区Aⅴ天堂| 91极品尤物国产在线播放| 国产毛片av一区二区三区网站| 超清无码AV丝袜片在线观看| 亚洲色图视频在线观看网站| 男女日比免费观看视频| 欧美日韩a级a| 亚洲欧美日韩精品高清| 凉山| 国产一区精品综亚洲av| 国产白浆精品一区二区三区| 国产精品无套粉嫩白浆在线| 日韩精品国产一区二区| 乌苏市| 国产亚洲精品久久麻豆| 国产亚洲精品日韩香蕉网| 国产成人色污在线观看| 日本高清视频在线一区二区三区| av亚洲在线一区二区| 锦州市| 新郑市| 宜都市| 曲阜市| 宜宾市| 资兴市| 汶上县| 91精品国产91久久久无码色戒 | 国产不卡一区二区av| 精品亚洲男人天堂av| 中国免费av网| 无码免费午夜福利片在线| 人妻少妇精品系列一区二区| 亚洲国产一区久久yourpan| 伊金霍洛旗| 亚洲情精品中文字幕有码在线| 宜丰县| 中文字幕精品乱码亚洲一区99| 出国|