js獲取圖片實際大小的寬高

簡陋的獲取圖片實際寬高的方式

// 圖片地址
var img_url = ‘13643608813441.jpg'

// 創建對象
var img = new Image()

// 改變圖片的src
img.src = img_url

// 打印
alert('width:'+img.width+',height:'+img.height);

結果如下:

寬高都是0的這個結果很正常,因為圖片的相關數據都沒有被加載前它的寬高默認就是0,我們需要它加載完所有的相關數據再獲取寬和高。

onload加載所有的相關數據后,取寬高

// 圖片地址
var img_url = ‘13643608813441.jpg'

// 創建對象
var img = new Image()

// 改變圖片的src
img.src = img_url

// 加載完成執行
img.onload = function(){
    // 打印
    alert('width:'+img.width+',height:'+img.height)
}

結果如下:

通過onload就能獲取到圖片的寬高了。但onload大一點的圖通常都比較慢,不實用,但只要圖片被瀏覽器緩存,那么圖片加載幾乎就不用等待即可觸發onload,我們要的是占位符。所以有些人通過緩存獲取也可以這么寫。

通過complete與onload一起混合使用

// 圖片地址
var img_url = ‘13643608813441.jpg'

// 創建對象
var img = new Image()

// 改變圖片的src
img.src = img_url

// 判斷是否有緩存
if(img.complete){
    // 打印
    alert('from:complete : width:'+img.width+',height:'+img.height)
}else{
    // 加載完成執行
    img.onload = function(){
        // 打印
        alert('width:'+img.width+',height:'+img.height)
    }
}

第一次執行,永遠是onload觸發,你再刷新,幾乎都是緩存觸發了。

從緩存里讀取圖片的寬高不用說,非常方便快捷,今天我們要解決的是沒有緩存而又快速的相比onload更快的方式去獲取圖片的寬高。我們常常知道有些圖片雖然沒有完全down下來,但是已經先有占位符,然后一點一點的加載。既然有占位符那應該是請求圖片資源服務器響應后返回的。可服務器什么時候響應并返回寬高的數據沒有觸發事件,比如onload事件。于是催生了第四種方法。

通過定時循環檢測獲取

這個方法可以很快獲取圖片相關信息:

// 記錄當前時間戳
var start_time = new Date().getTime()
// 圖片地址 后面加時間戳是為了避免緩存
var img_url = 'http://b.zol-img.com.cn/desk/bizhi/image/2/2560x1600/1365477614755.jpg?'+start_time
// 創建對象
var img = new Image()
// 改變圖片的src
img.src = img_url
// 定時執行獲取寬高
var check = function(){
 // 只要任何一方大于0
 // 表示已經服務器已經返回寬高
    if (img.width>0 || img.height>0) {
        var diff = new Date().getTime() - start_time;
        document.body.innerHTML += '
        from:check : width:'+img.width+',height:'+img.height+', time:'+diff+'ms';
        clearInterval(set);
    }
}
var set = setInterval(check,40)
// 加載完成獲取寬高
img.onload = function(){
    var diff = new Date().getTime() - start_time;
    document.body.innerHTML += 'from:onload : width:'+img.width+',height:'+img.height+', time:'+diff+'ms';
};

結果如下:

這是一張2560 * 1600大小的圖片,各瀏覽器執行結果都能看到通過快速獲取圖片大小的方法幾乎都在200毫秒以內,而onload至少五秒以上,這差別之大說明快速獲取圖片寬高非常實用。

當然現在瀏覽器隨著性能的提升也許這一差距不是那么的大,甚至與onload有時還會更快些。

提示:后面還有精彩敬請期待,請大家關注我的專題:web前端。如有意見可以進行評論,每一條評論我都會認真對待。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,581評論 25 708
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,257評論 4 61
  • 用料: 紫米 酸奶 蜂蜜 少許清水 做法: 把紫米清洗好,并煮好。煮好之后用勺子取出一些放入破壁機中,倒入一袋酸奶...
    東皇泥鰍閱讀 894評論 0 1
  • 看紙的時候 尋找海洋把月亮鋪成的小徑 把帷幔繡成了極樂的世界 依然用你輕盈的名字 如今我有一個無縱的人 年輕的守門...
    一荷2017閱讀 274評論 0 2