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

資訊專欄INFORMATION COLUMN

A: 如何實現(xiàn) Lazy Load?

Miyang / 2767人閱讀

摘要:最近面試了幾家公司,他們不約而同都問到了這個問題了解嗎其實是對圖片的一種延遲加載技術,直到用戶滾動圖片出現(xiàn)在用戶可視范圍時才把它加載出來。我在上親身實踐了一下,然而發(fā)現(xiàn),總是返回,其他兩種方法都正常獲取到了值。

最近面試了幾家公司,他們不約而同都問到了這個問題:了解 Lazy Load 嗎?

Lazy Load is delays loading of images in long web pages. Images outside of viewport are not loaded until user scrolls to them. This is opposite of image preloading.

Using Lazy Load on long web pages will make the page load faster. In some cases it can also help to reduce server load.

Lazy Load其實是對圖片的一種延遲加載技術,直到用戶滾動圖片出現(xiàn)在用戶可視范圍時才把它加載出來。它與圖片預加載技術完全相反,卻都是為了提高用戶體驗而設計。

Lazy Load Plugin for jQuery - Mika Tuupola

jQuery的Lazy Load插件大家應該都有了解或者已經(jīng)使用過了。下面是一個簡單的栗子:

    
    
    $(function() {
        $("img.lazy").lazyload();//可以傳入自定義的參數(shù)
    });

data-original屬性值是我們想要顯示的圖片的URL,當用戶滾動頁面,圖片出現(xiàn)在視線范圍內(nèi)時,替換img元素的src屬性值為data-original屬性值。

不過僅僅了解這些好像遠遠不夠。我在網(wǎng)上查找了一些Lazy Load的實現(xiàn)原理,發(fā)現(xiàn)了以下的代碼:

    // 原生JS實現(xiàn)方法
    

這位老鐵自己寫了一段簡陋的實現(xiàn)代碼,他用了定時器循環(huán)調(diào)用lazyload方法,當然大家可以先忽略,重點看一下如何獲取當前滾動條的位置和視口的高度。

    var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;

這個東西我剛看也是一頭霧水。我在chrome上親身實踐了一下,然而發(fā)現(xiàn),document.documentElement.scrollTop總是返回0,其他兩種方法都正常獲取到了值。于是查了一下才知道這三個獲取滾動條位置的方法背后還有故事。看這個問題:

document.documentElement.scrollTop return value differs in Chrome

還有其中一位老鐵的回答:

The standards-based way of getting the scroll is window.scrollY. This is supported by Chrome, Firefox, Opera, Safari and IE Edge or later. If you only support these browsers, you should go with this property.

IE >= 9 supports a similar property window.pageYOffset, which for the sake of compatibility returns the same as window.scrollY in recent browsers, though it may perhaps be deprecated at some point.

The problem with using document.documentElement.scrollTop or document.body.scrollTop is that the scroll needn"t be defined on either of these. Chrome and Safari define their scroll on the element whilst Firefox defines it on the element returned by document.documentElement, for example. This is not standardized, and could potentially change in future versions of the browsers. However, if the scrollY or pageYOffset are not present, this is the only way to get the scroll.

window.scrollY || window.pageYOffset || document.body.scrollTop + (document.documentElement && document.documentElement.scrollTop || 0)

那這故事我就不講了。

    var viewportSize = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;

這行代碼是為了獲取視口的高度,我們同樣看到了三種方法,那他們背后肯定也有不為我知的故事,現(xiàn)在我也不太想知道了。

    var x =scrollTop+viewportSize-imgs[i].offsetTop;

如何獲得一個元素與頁面頂端的距離,你學會了嗎?

下面是用jQuery實現(xiàn)的lazyload,也是剛才那位老鐵寫的:

    /**
    * 圖片的src實現(xiàn)原理
    */
    $(document).ready(function(){
        // 獲取頁面視口高度
        var viewportHeight = $(window).height();
        var lazyload = function() {
            // 獲取窗口滾動條距離
            var scrollTop = $(window).scrollTop();
            $("img").each(function(){
            // 判斷 視口高度+滾動條距離 與 圖片元素距離文檔原點的高度         
            var x = scrollTop + viewportHeight - $(this).position().top;
            // 如果大于0 即該元素能被瀏覽者看到,則將暫存于自定義屬性loadpic的值賦值給真正的src            
            if (x > 0)
            {
                $(this).attr("src",$(this).attr("loadpic")); 
            }
        })
        }
        // 創(chuàng)建定時器 “實時”計算每個元素的src是否應該被賦值
        setInterval(lazyload,100);
    });

上述的實現(xiàn)呢,我感覺還是可以說服我的,把定時器去掉,加入對滾動事件的偵聽即可。不過,就這么草草了事好像也沒什么意思,我下載了jQuery-lazyload的源碼,準備研究一波。如果我看懂了什么,或者有什么收獲,再來聊聊。

    /*!
     * Lazy Load - jQuery plugin for lazy loading images
     *
     * Copyright (c) 2007-2015 Mika Tuupola
     *
     * Licensed under the MIT license:
     *   http://www.opensource.org/licenses/mit-license.php
     *
     * Project home:
     *   http://www.appelsiini.net/projects/lazyload
     *
     * Version:  1.9.7
     *
     */
    (function($, window, document, undefined) {
      // body...
    })(jQuery, window, document);

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

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

相關文章

  • react-lazy-load粗讀

    摘要:粗讀近來沒什么特別要做的事,下班回來的空閑時間也比較多,所以抽空看看懶加載是怎么實現(xiàn)的,特別是看了下的庫的實現(xiàn)。之先別關注,按他給注釋說測試用。之是組件綁定事件時會觸發(fā)的函數(shù)。 react-lazy-load粗讀 近來沒什么特別要做的事,下班回來的空閑時間也比較多,所以抽空看看懶加載是怎么實現(xiàn)的,特別是看了下 react-lazy-load 的庫的實現(xiàn)。 懶加載 這里懶加載場景不是路由...

    dailybird 評論0 收藏0
  • SAP Fiori里的List是如何做到懶加載Lazy load的

    摘要:從調(diào)用棧能清楚發(fā)現(xiàn)是這個事件觸發(fā)的第二批的讀取動作。然后再去這一個調(diào)用棧,發(fā)現(xiàn)一個屬性維護了一個開始索引,每次到底部的事件觸發(fā)之后,該屬性值都會被累加。這些庫文件一覽在開發(fā)者工具查看從后臺加載的庫文件,能發(fā)現(xiàn)屬性在此處被硬編碼成。 今天一同事問我這個問題:S/4HANA Fiori應用里的列表,一旦Scroll到底部就會自動向后臺發(fā)起新的請求把更多的數(shù)據(jù)讀取到前臺顯示。 以Produc...

    RyanQ 評論0 收藏0
  • SAP Fiori里的List是如何做到懶加載Lazy load的

    摘要:從調(diào)用棧能清楚發(fā)現(xiàn)是這個事件觸發(fā)的第二批的讀取動作。然后再去這一個調(diào)用棧,發(fā)現(xiàn)一個屬性維護了一個開始索引,每次到底部的事件觸發(fā)之后,該屬性值都會被累加。這些庫文件一覽在開發(fā)者工具查看從后臺加載的庫文件,能發(fā)現(xiàn)屬性在此處被硬編碼成。 今天一同事問我這個問題:S/4HANA Fiori應用里的列表,一旦Scroll到底部就會自動向后臺發(fā)起新的請求把更多的數(shù)據(jù)讀取到前臺顯示。 以Produc...

    SolomonXie 評論0 收藏0
  • SAP Fiori里的List是如何做到懶加載Lazy load的

    摘要:從調(diào)用棧能清楚發(fā)現(xiàn)是這個事件觸發(fā)的第二批的讀取動作。然后再去這一個調(diào)用棧,發(fā)現(xiàn)一個屬性維護了一個開始索引,每次到底部的事件觸發(fā)之后,該屬性值都會被累加。這些庫文件一覽在開發(fā)者工具查看從后臺加載的庫文件,能發(fā)現(xiàn)屬性在此處被硬編碼成。 今天一同事問我這個問題:S/4HANA Fiori應用里的列表,一旦Scroll到底部就會自動向后臺發(fā)起新的請求把更多的數(shù)據(jù)讀取到前臺顯示。 以Produc...

    Zhuxy 評論0 收藏0

發(fā)表評論

0條評論

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