頁面裡的img元素,想要擷取它的原始大小,以寬度為例可能首先想到的就是width,如下
<img src="jpg/rBEhVlNhh8wIAAAAAADmFBLo1twAAM26gOmCgYAAOYs716.jpg"> <script> var img = document.getElementsByTagName('img')[0] var width = getWH(img, 'width') // 690 </script>
這裡使用的getWH方法是之前文章裡提到的。這時候擷取的寬度和圖片的原始大小是一樣的。
如果給img加上了width屬性,這種方式就不行了,比如圖片實際寬度是690,設定了width為400,這時按上面的方式擷取則返回400
<img width="400" src="jpg/rBEhVlNhh8wIAAAAAADmFBLo1twAAM26gOmCgYAAOYs716.jpg"> <script> var img = document.getElementsByTagName('img')[0] var width = getWH(img, 'width') // 400 </script>
很明顯,400不是圖片的原始寬度。
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/script/
有一種方式可以擷取到,直接建立一個新img對象,然後把舊img的src賦值給新的,這時候擷取新img的寬度即可
<img width="400" src="jpg/rBEhVlNhh8wIAAAAAADmFBLo1twAAM26gOmCgYAAOYs716.jpg"> <script> function getNaturalWidth(img) { var image = new Image() image.src = img.src var naturalWidth = image.width return naturalWidth } var img = document.getElementsByTagName('img')[0] getNaturalWidth(img) // 690 </script>
需要注意的是,這裡新建立的image是不需要添加的DOM文檔裡的。
HTML5提供了一個新屬性naturalWidth/naturalHeight可以直接擷取圖片的原始寬高。這兩個屬性在Firefox/Chrome/Safari/Opera及IE9裡已經實現。改造下擷取圖片尺寸的方法。
function getImgNaturalDimensions(img, callback) { var nWidth, nHeight if (img.naturalWidth) { // 現代瀏覽器 nWidth = img.naturalWidth nHeight = img.naturalHeight } else { // IE6/7/8 var imgae = new Image() image.src = img.src image.onload = function() { callback(image.width, image.height) } } return [nWidth, nHeight] }
注意IE6/7/8的處理,建立了一個新的img,僅設定其src,這時需要讓圖片完全載入後才可以擷取其寬高。因此這裡是非同步,可以傳一個回調,回調裡把原始的寬高作為參數傳入。