国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

圖片懶加載通俗易懂

NervosNetwork / 690人閱讀

摘要:懶加載的意義這里懶的意思可以理解為延遲,如淘寶京東這些電商平臺有大量的圖片,如果上來就加載服務器表示壓力山大,所以就想出了懶加載這種克敵之法,用戶滾動到的區(qū)域才發(fā)送請求加載內容原理將頁面中的標簽指向一張小照片或者為空都可以,然后寫一個自定義

懶加載的意義

這里‘懶’的意思可以理解為延遲,如淘寶、京東這些電商平臺有大量的圖片,如果上來就加載服務器表示壓力山大,所以就想出了懶加載這種克敵之法,用戶滾動到的區(qū)域才發(fā)送請求加載內容

原理

將頁面中的img標簽src指向一張小照片或者為空都可以,然后寫一個自定義屬性比如(data-src)指向正確的圖片,其實就是用正確的照片替換src里面的照片

代碼

在寫代碼前,需要了解各種高度。先看這篇文章js坐標位置

    
    
    Document
    


    
        
        
        
        
        
        
        
        
javascript
    var num = document.getElementsByTagName("img").length;
    var img = document.getElementsByTagName("img");
    var n = 0; //存儲圖片加載到的位置,避免每次都從第一張圖片開始遍歷
    lazyload(); //頁面載入完畢加載可是區(qū)域內的圖片
    window.onscroll = lazyload;
    function lazyload() { //監(jiān)聽頁面滾動事件
        var seeHeight = document.documentElement.clientHeight; //可見區(qū)域高度
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動條距離頂部高度
        for (var i = n; i < num; i++) {
            if (img[i].offsetTop < seeHeight + scrollTop) {
                if (img[i].getAttribute("src") == "") {
                    img[i].src = img[i].getAttribute("data-src");
                }
                n = i + 1;
            }
        }
    }
使用節(jié)流函數(shù)進行性能優(yōu)化

如果直接將函數(shù)綁定在scroll事件上,當頁面滾動時,函數(shù)會被高頻觸發(fā),這非常影響瀏覽器的性能。
我想實現(xiàn)限制觸發(fā)頻率,來優(yōu)化性能。

節(jié)流函數(shù):只允許一個函數(shù)在N秒內執(zhí)行一次。下面是一個通俗易通的節(jié)流函數(shù):

    var num = document.getElementsByTagName("img").length;
    var img = document.getElementsByTagName("img");
    var n = 0; //存儲圖片加載到的位置,避免每次都從第一張圖片開始遍歷
    resizehandler(); //頁面載入完畢加載可是區(qū)域內的圖片
    n=0;
    function resizehandler(){
        var seeHeight = document.documentElement.clientHeight; //可見區(qū)域高度
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動條距離頂部高度
        for (var i = n; i < num; i++) {
            if (img[i].offsetTop < seeHeight + scrollTop) {
                if (img[i].getAttribute("src") == "") {
                    img[i].src = img[i].getAttribute("data-src");
                }
                n = i + 1;
            }
        }
    }
    function throttle(method,context){
        clearTimeout(method.tId);
        method.tId=setTimeout(function(){
            method.call(context);
        },500);
    }
    window.onscroll=function(){
        throttle(resizehandler,window);
    }
函數(shù)節(jié)流方案以下三種 時間戳方案
    var num = document.getElementsByTagName("img").length;
    var img = document.getElementsByTagName("img");
    var n = 0; //存儲圖片加載到的位置,避免每次都從第一張圖片開始遍歷
    lazyload(); //頁面載入完畢加載可是區(qū)域內的圖片
    function lazyload() { //監(jiān)聽頁面滾動事件
        var seeHeight = document.documentElement.clientHeight; //可見區(qū)域高度
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動條距離頂部高度
        for (var i = n; i < num; i++) {
            if (img[i].offsetTop < seeHeight + scrollTop) {
                if (img[i].getAttribute("src") == "") {
                    img[i].src = img[i].getAttribute("data-src");
                }
                n = i + 1;
            }
        }
    }
---------------------------------  以上代碼不在重復  --------------------------------
    var throttle = function(fun,delay){
        var perv = Date.now();
        return function(){
            var context = this;
            var now = Date.now();
            if (now-perv >= delay){
                fun.apply(context,arguments)
                prev = Date.now();
            }
        }
    }
    window.addEventListener("scroll",throttle(lazyload,1000))
定時器方案
    var throttle = function(fun,delay){
        var timer = null;
        return function(){
            var context = this;
            if(!timer){
                timer = setTimeout(function(){
                    fun.apply(context,arguments)
                    timer = null
                },delay)
            }
        }
    }
    window.addEventListener("scroll",throttle(lazyload,1000))
時間戳+定時器方案
    var throttle = function(fun,delay){
        var timer = null;
        var startTime = Date.now();
        return function() {
                var curTime = Date.now();
                var remaining = delay - (curTime - startTime);
                var context = this;
                var args = arguments;
                clearTimeout(timer);
                if (remaining <= 0) {
                        fun.apply(context, args);
                        startTime = Date.now();
                } else {
                        timer = setTimeout(fun, remaining);
                }
        }
    }
    window.addEventListener("scroll",throttle(lazyload,1000))

參考資料

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

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/101703.html

相關文章

  • lozad.js:加載神器

    摘要:是基于的輕量級高性能可配置的純并且無依賴的懶加載器,其能夠被用于進行圖片等多種形式的元素。在上,至今短短的一個月的時間,已經(jīng)收獲了的。傳送門阮一峰老師使用教程懶加載懶加載其實就是延遲加載。 showImg(https://github.com/ApoorvSaxena/lozad.js/raw/master/banner/lozad-banner.jpg); Lozad.js 是基于 ...

    Magicer 評論0 收藏0
  • 前端基礎入門

    摘要:手把手教你做個人火的時候,隨便一個都能賺的盆滿缽滿,但是,個人沒有服務端,沒有美工,似乎就不能開發(fā)了,真的是這樣的嗎秘密花園經(jīng)典的中文手冊。涵蓋前端知識體系知識結構圖書推薦以及入門視頻教程,全的簡直不要不要的了。 JavaScript 實現(xiàn)點擊按鈕復制指定區(qū)域文本 html5 的 webAPI 接口可以很輕松的使用短短的幾行代碼就實現(xiàn)點擊按鈕復制區(qū)域文本的功能,不需要依賴 flash。...

    shinezejian 評論0 收藏0
  • 通俗的方式理解關鍵渲染路徑

    摘要:縮短的長度能夠有效降低首屏時間。即便你使用打包工具只引用了一個外部腳本文件,但是如果這個腳本文件的傳輸延遲和執(zhí)行延遲,會導致后面的非關鍵資源的請求被延遲,雖然這不會減慢的首屏時間。 以通俗的方式理解關鍵渲染路徑 我在看了 google 的 Critical Rendering Path (中文)后, 想把 CRP(Critical Rendering Path) 用通俗易懂的方式描述出...

    Thanatos 評論0 收藏0

發(fā)表評論

0條評論

NervosNetwork

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<