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

資訊專(zhuān)欄INFORMATION COLUMN

圖片懶加載通俗易懂

NervosNetwork / 689人閱讀

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

懶加載的意義

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

原理

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

代碼

在寫(xiě)代碼前,需要了解各種高度。先看這篇文章js坐標(biāo)位置

    
    
    Document
    


    
        
        
        
        
        
        
        
        
javascript
    var num = document.getElementsByTagName("img").length;
    var img = document.getElementsByTagName("img");
    var n = 0; //存儲(chǔ)圖片加載到的位置,避免每次都從第一張圖片開(kāi)始遍歷
    lazyload(); //頁(yè)面載入完畢加載可是區(qū)域內(nèi)的圖片
    window.onscroll = lazyload;
    function lazyload() { //監(jiān)聽(tīng)頁(yè)面滾動(dòng)事件
        var seeHeight = document.documentElement.clientHeight; //可見(jiàn)區(qū)域高度
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動(dòng)條距離頂部高度
        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ù)進(jìn)行性能優(yōu)化

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

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

    var num = document.getElementsByTagName("img").length;
    var img = document.getElementsByTagName("img");
    var n = 0; //存儲(chǔ)圖片加載到的位置,避免每次都從第一張圖片開(kāi)始遍歷
    resizehandler(); //頁(yè)面載入完畢加載可是區(qū)域內(nèi)的圖片
    n=0;
    function resizehandler(){
        var seeHeight = document.documentElement.clientHeight; //可見(jiàn)區(qū)域高度
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動(dòng)條距離頂部高度
        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é)流方案以下三種 時(shí)間戳方案
    var num = document.getElementsByTagName("img").length;
    var img = document.getElementsByTagName("img");
    var n = 0; //存儲(chǔ)圖片加載到的位置,避免每次都從第一張圖片開(kāi)始遍歷
    lazyload(); //頁(yè)面載入完畢加載可是區(qū)域內(nèi)的圖片
    function lazyload() { //監(jiān)聽(tīng)頁(yè)面滾動(dòng)事件
        var seeHeight = document.documentElement.clientHeight; //可見(jiàn)區(qū)域高度
        var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //滾動(dòng)條距離頂部高度
        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;
            }
        }
    }
---------------------------------  以上代碼不在重復(fù)  --------------------------------
    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))
定時(shí)器方案
    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))
時(shí)間戳+定時(shí)器方案
    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))

參考資料

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/101703.html

相關(guān)文章

  • lozad.js:加載神器

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

    Magicer 評(píng)論0 收藏0
  • 前端基礎(chǔ)入門(mén)

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

    shinezejian 評(píng)論0 收藏0
  • 通俗的方式理解關(guān)鍵渲染路徑

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

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

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

0條評(píng)論

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