亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用JavaScript / jQuery預加載圖像的最佳方法?

使用JavaScript / jQuery預加載圖像的最佳方法?

慕運維8079593 2019-10-08 09:58:39
我完全意識到,無論是在SO還是離線狀態下,這個問題在任何地方都被提出并得到了回答。但是,每次似乎都有不同的答案,例如this,this和that。我不在乎是否在使用jQuery-重要的是它可以工作,并且是跨瀏覽器的。]那么,預加載圖像的最佳方法是什么?
查看完整描述

3 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

拼寫

正如其他人提到的那樣,由于多種原因,拼寫效果很好,但是,效果卻不盡如人意。

  • 從好的方面來說,您最終只對圖像發出一個HTTP請求。YMMV雖然。

  • 不利的一面是,您將所有內容加載到一個HTTP請求中。由于當前大多數瀏覽器都限于2個并發連接,因此圖像請求可以阻止其他請求。因此,YMMV和菜單背景之類的內容可能無法渲染一會。

  • 多張圖像共享相同的調色板,因此可以節省一些費用,但情況并非總是如此,甚至可以忽略不計。

  • 由于圖像之間共享的數據更多,因此壓縮得到了改善。

但是,處理不規則形狀非常棘手。將所有新圖像合并到新圖像中是另一種煩惱。

使用<img>標簽的低千斤頂方法

如果您正在尋找最確定的解決方案,則應采用我仍然偏愛的低千斤頂方法。在文檔的末尾創建的<img>鏈接到的圖像和設置width,并height以1x1像素,另外把它們放在一個隱藏的股利。如果它們在頁面末尾,則會在其他內容之后加載它們。


查看完整回答
反對 回復 2019-10-08
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

這里介紹的方法均不適合我使用,因此,這是經過測試并與Chrome 25和Firefox 18一起使用的方法。使用jQuery和此插件來解決load事件怪癖:


function preload(sources, callback) {

    if(sources.length) {

        var preloaderDiv = $('<div style="display: none;"></div>').prependTo(document.body);


        $.each(sources, function(i,source) {

            $("<img/>").attr("src", source).appendTo(preloaderDiv);


            if(i == (sources.length-1)) {

                $(preloaderDiv).imagesLoaded(function() {

                    $(this).remove();

                    if(callback) callback();

                });

            }

        });

    } else {

        if(callback) callback();

    }

}

用法:


preload(['/img/a.png', '/img/b.png', '/img/c.png'], function() { 

    console.log("done"); 

});

請注意,如果禁用了緩存,您將得到不同的結果,當開發人員工具打開時,默認情況下在Chrome上是這樣,因此請記住這一點。


查看完整回答
反對 回復 2019-10-08
  • 3 回答
  • 0 關注
  • 402 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號