jQuery頁面滾動圖片等元素動態加載實現

1、關於滾動顯屏加載

經常會有這樣子的頁面,內容很豐富,頁面很長,圖片較多。好比說光棍節很瘋狂的淘寶商城頁面。
或者是前段時間寫血本買了個高檔耳機的京東商城頁面,或者是新浪微博之類。javascript

這些頁面圖片數量多,並且比較大,少說百來K,多則上兆。要是頁面載入就一次性加載完畢。乖乖,估計黃花都變成黃花菜了。因此,咱們得作點什麼,避免這種糟糕的情況發生。目前很流行的作法就是滾動動態加載,顯示屏幕以外的圖片默認是不加載的,隨着頁面的滾動,這個要顯示圖片的區域進入了瀏覽器但是窗口範圍,則觸發圖片的加載顯示。這種作法的好處是,一是頁面加載速度快(瀏覽器轉啊轉的圈圈或是進度條很快就玩完了),二是節約了流量,由於不可能每一個用戶瀏覽頁面時從頭滾到尾的。html

貌似我上面提到的幾個站點就是採用的這種作法,例如,我以迅雷不及掩耳的速度從淘寶商城首頁截下來的已觸發滾動加載可是未加載完畢的圖片。

前端

這是提升前端性能,優化頁面加載速度很實用的作法。看上去這種技巧有些技術門檻,其實很簡單的。咱們須要一個滾動事件,而後判斷元素是否在瀏覽器窗口,而後,顯示圖片(或是其餘元素)就能夠啦。我在jQuery庫下寫了個實現此效果的插件,下面就將簡單展現講解此插件的使用以及滾動動態加載的實現。java

2、jQuery滾動加載插件scrollLoading

雖然只有幾十行代碼,可是爲了方便使用,我仍是將其插件化了。插件名爲jquery.scrollLoading.js,您能夠狠狠地點擊這裏下載(右鍵 – [目標|連接]另存爲),或是點擊這裏下載mini壓縮版的。jquery

demo
您能夠狠狠地點擊這裏:jQuery滾動加載圖片等demo,若是您的網速是在貧困線上掙扎,能夠慢慢拖動滾動條,就能夠很清楚的看到滾動加載的效果了;若是您的網速讓你引覺得豪,哥,你須要很快的拖動滾動條才能瞥見效果。效果相似下面:
滾動加載demo頁面效果截圖 張鑫旭-鑫空間-鑫生活ajax

demo頁面中彷佛有段破壞和諧的HTML片斷,那是動態加載HTML後的效果,也就是說,此scrollLoading不只能夠用來滾動加載圖片,Ajax load頁面什麼的也是能夠的。api

3、scrollLoading使用

無論怎樣,首先調用jQuery庫文件,還有jquery.scrollLoading.js,您能夠直接在頁面的某處添上以下的代碼:瀏覽器

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="http://www.zhangxinxu.com/study/js/mini/jquery.scrollLoading-min.js"></script>

此插件的方法名就是scrollLoading,因此,直接:包裝器.scrollLoading();就能夠實現滾動加載效果了,簡單的吧。以下:前端性能

$(".scrollLoading").scrollLoading();

表示全部class爲scrollLoading的元素綁定了滾動加載的方法。
固然,不可能真的就如此簡單,咱們還須要作點小動做的。元素默認是不加載的,那麼真正的加載地址顯然要預先在元素上放置的,例如新浪微博默認把頭像地址綁在了一個自定義的」dynamic-src」屬性上,見下圖:
新浪微博綁定真實圖片地址自定義屬性 張鑫旭-鑫空間-鑫生活函數

在HTML5中,以data-開頭的自定義屬性都是合法的,且地址能夠是圖片,頁面等。因此,我設定了綁定地址的自定義屬性爲」data-url」,此屬性值設爲真實的圖片(或頁面)地址就能夠了。例以下面:

<div class="scrollLoading" data-url="loaded.html">加載中...</div>

會在滾動時加載名爲loaded.html的頁面,並自動替換裏面的內容。

對於經常使用的圖片,還有一點小問題,就是其默認的src圖片地址。其src地址不能是真實的圖片地址(不然會直接一次性所有加載),也不能是空地址或是壞地址,不然IE瀏覽器下會出現很驚悚的紅叉叉。IE瀏覽器下的紅叉叉 張鑫旭-鑫空間-鑫生活。個人作法是默認連接的是一個1px * 1px的gif透明圖片(大小很小),同時能夠透出後面加載中gif動畫圖片,當滾動加載的時候直接把此gif圖片替換掉。因而,對於圖片,可能就有相似下面的代碼:

<img class="scrollLoading" data-url="http://image.zhangxinxu.com/image/study/head/s180/1.jpeg" src="http://www.zhangxinxu.com/study/image/pixel.gif" width="180" height="180" style="background:url(http://www.zhangxinxu.com/study/image/loading.gif) no-repeat center;" />

4、scrollLoading可選參數

scrollLoading是個很簡單很小的插件(無註釋YUI compressor min版僅508B)見下表:

參數 默認 釋義
attr data-url 獲取元素加載地址的屬性名

就這些了。
根據部分同行的要求,現增長兩個可選參數,一個爲container表示容器,另外一個爲callback表示回調。具體參見下表:

參數 默認 釋義
attr data-url 獲取元素加載地址的屬性名
container $(window) 滾動的容器。默認爲$(window),也就是默認的網頁滾動。
callback $.noop 回調。元素動態加載完畢後執行的回調函數。其中回調函數的上下文this就是當前DOM元素。注意:若是沒法獲取元素加載地址,則不執行動態加載,可是會觸發回調。在某些需求下,您能夠缺省url值,僅僅觸發回調。

 

新demo中綁定JavaScript代碼以下:

$(".scrollLoading").scrollLoading({
    container: $("#zxxMainCon"),
    callback: function() {
        this.style.border = "3px solid #a0b3d6";	
    }
});
相關文章
相關標籤/搜索