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

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

請問支持事件的圖像預加載器javascript

請問支持事件的圖像預加載器javascript

慕少森 2019-12-02 08:04:06
支持事件的圖像預加載器javascript我正在嘗試找到一個圖像預加載器腳本。雖然我發現了一些,但它們都不支持在預加載完成時觸發的事件。有誰知道會這樣做的任何腳本或jQuery插件?希望這個問題適合stackoverflow - 如果沒有,請隨時將其刪除。
查看完整描述

3 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

這是一個從數組中預加載圖像并在最后一個完成后調用回調的函數:


function preloadImages(srcs, imgs, callback) {

    var img;

    var remaining = srcs.length;

    for (var i = 0; i < srcs.length; i++) {

        img = new Image();

        img.onload = function() {

            --remaining;

            if (remaining <= 0) {

                callback();

            }

        };

        img.src = srcs[i];

        imgs.push(img);

    }

}


// then to call it, you would use this

var imageSrcs = ["src1", "src2", "src3", "src4"];

var images = [];


preloadImages(imageSrcs, images, myFunction);

而且由于我們現在正處于使用promises進行異步操作的時代,這里是上面的一個版本,它使用promises并通過ES6標準承諾通知調用者:


function preloadImages(srcs) {

    function loadImage(src) {

        return new Promise(function(resolve, reject) {

            var img = new Image();

            img.onload = function() {

                resolve(img);

            };

            img.onerror = img.onabort = function() {

                reject(src);

            };

            img.src = src;

        });

    }

    var promises = [];

    for (var i = 0; i < srcs.length; i++) {

        promises.push(loadImage(srcs[i]));

    }

    return Promise.all(promises);

}


preloadImages(["src1", "src2", "src3", "src4"]).then(function(imgs) {

    // all images are loaded now and in the array imgs

}, function(errImg) {

    // at least one image failed to load

});

而且,這是一個使用2015 jQuery承諾的版本:


function preloadImages(srcs) {

    function loadImage(src) {

        return new $.Deferred(function(def) {

            var img = new Image();

            img.onload = function() {

                def.resolve(img);

            };

            img.onerror = img.onabort = function() {

                def.reject(src);

            };

            img.src = src;

        }).promise();

    }

    var promises = [];

    for (var i = 0; i < srcs.length; i++) {

        promises.push(loadImage(srcs[i]));

    }

    return $.when.apply($, promises).then(function() {

        // return results as a simple array rather than as separate arguments

        return Array.prototype.slice.call(arguments);

    });

}


preloadImages(["src1", "src2", "src3", "src4"]).then(function(imgs) {

    // all images are loaded now and in the array imgs

}, function(errImg) {

    // at least one image failed to load

});



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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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