圖片上傳時獲取圖片的寬和高
阿新 • • 發佈:2018-01-25
con element 執行 事件 body 無法 使用 圖片加載 fun
經常會遇到圖片上傳的問題,這時候我們會傳圖片的地址,寬和高到服務器,至於圖片上傳就不說了,這裏主要說圖片上傳時獲取圖片的原始寬和高的問題。
一般而言,我們把圖片上傳至服務器時,服務器會返回一個上傳地址給我們,這個就是我們圖片的url了,但是光有這個還是不夠的,因為還要將圖片的寬和高傳給服務器,這時候就可以這樣做了。直接上代碼:
var img = new Image() img.src = url
然後就可以使用img.width和img.height來獲取圖片的寬和高了。當然僅僅這樣做是不夠的,因為圖片上傳是異步的,並不能直接使用該方法獲取圖片的寬和高,這樣獲取到的都是0.
必須將上傳的圖片放置body標簽裏面才能去使用load事件,可以使用appendChild將img標簽插入body標簽裏面(document.getElementsByTagName(‘body‘)[0].appendChild(img)),這樣做會有一個問題,每次上傳圖片後頁面底部都會多一張圖,可以使用 display將其隱藏,然後使用onload方法,等圖片加載完。
img.onload = function(){ w = img.width; h = img.height }
然後將要發的請求放在一個方法裏面,在onload事件裏面去調用方法,否則load方法外面是獲取不到寬和高的。
當然了,還有另外一種方法,就是使用ES6的辦法。
async function foo(){ let img = new Image() img.src = ‘https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2546717774,3910079056&fm=200&gp=0.jpg‘ document.getElementsByTagName(‘body‘)[0].appendChild(img) // 圖片插入body標簽中,否則無法執行load事件 img.style.display = ‘none‘ // 將圖片隱藏return {‘width‘:img.width,‘height‘:img.height} } foo().then((val) => { // async函數內部return語句返回的值,會成為then方法回調函數的參數。所以此處的val就是上面return語句返回的值 console.log(val) // {‘width‘:img.width,‘height‘:img.height} })
圖片上傳時獲取圖片的寬和高