亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

javascript - 如何調(diào)用讀取到的遠程圖片的寬高
怪我咯
怪我咯 2017-05-18 10:57:30
0
2
519

我想在函數(shù)外調(diào)用這個圖片的寬高,應(yīng)該如何寫呢?
卡了三天了,沒有頭緒。

    // 更新:
    // 05.27: 1、保證回調(diào)執(zhí)行順序:error > ready > load;2、回調(diào)函數(shù)this指向img本身
    // 04-02: 1、增加圖片完全加載后的回調(diào) 2、提高性能

    /**
     * 圖片頭數(shù)據(jù)加載就緒事件 - 更快獲取圖片尺寸
     *
     * 原理:沒有緩存的情況下,用計時器不斷驗證圖片的大小是否發(fā)生變化,如果不在變化則為ready
     *       如果有緩存則w3c瀏覽器會調(diào)用 complete,ie則會走 onload,都不在走 計時器那部分
     *
     * @version    2011.05.27
     * @author    TangBin
     * @see        http://www.planeart.cn/?p=1121
     * @param    {String}    圖片路徑
     * @param    {Function}    尺寸就緒
     * @param    {Function}    加載完畢 (可選)
     * @param    {Function}    加載錯誤 (可選)
     * @example imgReady('http://www.google.com.hk/intl/zh-CN/images/logo_cn.png', function () {
alert('size ready: width=' + this.width + '; height=' + this.height);
});
     */
    var imgReady = (function () {
        var list = [], intervalId = null,

            // 用來執(zhí)行隊列
            tick = function () {
                var i = 0;
                for (; i < list.length; i++) {
                    list[i].end ? list.splice(i--, 1) : list[i]();
                }
                ;
                !list.length && stop();
            },

            // 停止所有定時器隊列
            stop = function () {
                clearInterval(intervalId);
                intervalId = null;
            };

        return function (url, ready, load, error) {
            var onready, width, height, newWidth, newHeight,
                img = new Image();

            img.src = url;

            // 如果圖片被緩存,則直接返回緩存數(shù)據(jù)
            if (img.complete) {
                ready.call(img);
                load && load.call(img);
                return;
            }
            ;

            width = img.width;
            height = img.height;

            // 加載錯誤后的事件
            img.onerror = function () {
                error && error.call(img);
                onready.end = true;
                img = img.onload = img.onerror = null;
            };

            // 圖片尺寸就緒
            onready = function () {
                newWidth = img.width;
                newHeight = img.height;
                if (newWidth !== width || newHeight !== height ||
                    // 如果圖片已經(jīng)在其他地方加載可使用面積檢測
                    newWidth * newHeight > 1024
                    ) {
                    ready.call(img);
                    onready.end = true;
                }
                ;
            };
            onready();

            // 完全加載完畢的事件
            img.onload = function () {
                 // onload在定時器時間差范圍內(nèi)可能比onready快
                // 這里進行檢查并保證onready優(yōu)先執(zhí)行
                !onready.end && onready();

                load && load.call(img);

                // IE gif動畫會循環(huán)執(zhí)行onload,置空onload即可
                img = img.onload = img.onerror = null;
            };

                // 加入隊列中定期執(zhí)行
            if (!onready.end) {
                list.push(onready);
                // 無論何時只允許出現(xiàn)一個定時器,減少瀏覽器性能損耗
                if (intervalId === null) intervalId = setInterval(tick, 40);
            }
            ;
        };
    })();
    var img_url = 'http://www.planeart.cn/demo/imgReady/vistas24.jpg';
    imgReady(img_url, function () {
        alert(this.width + '\n' + this.height);
        document.getElementById('song').src = img_url;

    })

這種彈出寬高是可以的,但是如何能調(diào)用到這個寬高呢。
您的幾句代碼,可以節(jié)約我很多的時間,萬分感謝

怪我咯
怪我咯

走同樣的路,發(fā)現(xiàn)不同的人生

全部回復(fù)(2)
黃舟

回調(diào)

function yourFun(width,height){
    console.log(width,height)
}
var img_url = 'http://www.planeart.cn/demo/imgReady/vistas24.jpg';
    imgReady(img_url, function () {
        yourFun(this.width , this.height);
        document.getElementById('song').src = img_url;

    })

不知道我理解對了沒

過去多啦不再A夢

貌似這個問題解決不了,這個圖片讀取函數(shù)有點類似于ajax的異步,它的賦值是后執(zhí)行的

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板