2016-05-23 53 views
0

我有很多圖片的我的網頁上加載作爲這樣一個div的背景圖像:有沒有一種方法可以在頁面加載後才加載內聯css背景圖片?

<div style="background-image:url('http://www.example.com/someimg.jpg');"></div> 

而對於頁面加載速度的目的我想只有頁面加載後所有的圖像已經完全加載。

現在我可以只添加背景圖片與一些jQuery的那樣:

$(window).bind("load", function() { 
    $('div').css('background-image', 'http://www.example.com/someimg.jpg')'); 
}); 

我有大量的圖片,也是我使用一些動態的PHP加載這些圖像(其中用戶定期更新),所以我需要一些其他的解決方案,它可以用於網站上的任何背景圖片。

任何想法?

謝謝。

+1

* 「只有頁面全部加載後」 *你是什麼意思那呢?您網頁的** HTML **將會被完全加載或已被主動加載。在圖像之前你想排隊在什麼位置?腳本? –

+0

我的意思是當整個頁面完成加載。就像$(window).bind(「load」,function(){... works。只有我需要一個函數,它可以用於所有元素,而不僅僅是手動編寫的特定元素 – Ben

回答

2

您可以通過將您的圖像加載到數據屬性中而不是內聯style屬性來實現。然後使用jQuery循環訪問具有該數據屬性的所有元素,並使用該值來填充樣式。

例如 HTML:

<div data-bg="https://images.unsplash.com/photo-1463123081488-789f998ac9c4?format=auto&auto=compress&dpr=1&crop=entropy&fit=crop&w=1199&h=799&q=80">Element with bg</div> 
<div>Element without bg</div> 
<div data-bg="https://images.unsplash.com/photo-1462774603919-1d8087e62cad?format=auto&auto=compress&dpr=1&crop=entropy&fit=crop&w=1199&h=799&q=80">Element with bg</div> 

的jQuery:

$(window).load(function(){ 
    $('[data-bg]').each(function(){ 
    $(this).css('background','url(' + $(this).data('bg') + ')'); 
    }); 
}); 

我敲這件事證明:http://codepen.io/anon/pen/jqgLja

+0

好主意!我剛剛開始測試這個確切的想法:) – Ben

+0

它實際上會使頁面加載更快嗎? – Ben

+0

最終,您仍在加載所有內容,因此總頁面大小+資源將相同(由於新的JS代碼,數據字節數較大)。它所做的是推遲bg圖像的加載,直到所有其他加載完成。 CSS bg圖像不會阻止頁面呈現,因此它將取決於您的使用情況,以確定它是否爲用戶提供任何可感知的優勢來推遲其加載。如果您達到了最大併發請求限制(http://stackoverflow.com/questions/985431/max-parallel-http-connections-in-a-browser),那麼延遲可能會有好處,但從技術上來說,它幾乎沒有任何好處。 – Dan