Javascript获取图⽚原始宽度和⾼度的⽅法详解
前⾔
⽹上关于利⽤Javascript获取图⽚原始宽度和⾼度的⽅法有很多,本⽂将再次给⼤家谈谈这个问题,或许会对⼀些⼈能有所帮助。
⽅法详解
jquery在线图片页⾯中的img元素,想要获取它的原始尺⼨,以宽度为例,可能⾸先想到的是元素的innerWidth属性,或者jQuery中的width()⽅法。
如下:
<img id="img" src="1.jpg">
<script type="text/javascript">
var img = ElementById("img");
console.log(img.innerWidth); // 600
</script>
这样貌似可以拿到图⽚的尺⼨。
但是如果给img元素增加了width属性,⽐如图⽚实际宽度是600,设置了width为400。这时候innerWidth为400,⽽不是600。显然,⽤innerWidth获取图⽚原始尺⼨是不靠谱的。
这是因为 innerWidth属性获取的是元素盒模型的实际渲染的宽度,⽽不是图⽚的原始宽度。
<img id="img" src="1.jpg" width="400">
<script type="text/javascript">
var img = ElementById("img");
console.log(img.innerWidth); // 400
</script>
jQuery的width()⽅法在底层调⽤的是innerWidth属性,所以width()⽅法获取的宽度也不是图⽚的原始宽度。
那么该怎么获取img元素的原始宽度呢?
naturalWidth / naturalHeight
HTML5提供了⼀个新属性naturalWidth/naturalHeight可以直接获取图⽚的原始宽⾼。这两个属性在
Firefox/Chrome/Safari/Opera及IE9⾥已经实现。
如下:
var naturalWidth = ElementById('img').naturalWidth,
naturalHeight = ElementById('img').naturalHeight;
naturalWidth / naturalHeight在各⼤浏览器中的兼容性如下:
所以,如果不考虑兼容⾄IE8的,可以放⼼使⽤naturalWidth / naturalHeight属性了。
IE7/8中的兼容性实现:
在IE8及以前版本的浏览器并不⽀持naturalWidth和naturalHeight属性。
在IE7/8中,我们可以采⽤new Image()的⽅式来获取图⽚的原始尺⼨,如下:
function getNaturalSize (Domlement) {
var img = new Image();
img.src = DomElement.src;
return {
width: img.width,
height: img.height
};
}
// 使⽤
var natural = getNaturalSize (ElementById('img')),
natureWidth = natural.width,
natureHeight = natural.height;
IE7+浏览器都能兼容的函数封装:
function getNaturalSize (Domlement) {
var natureSize = {};
if(window.naturalWidth && window.naturalHeight) {
natureSize.width = Domlement.naturalWidth;
natureSizeheight = Domlement.naturalHeight;
} else {
var img = new Image();
img.src = DomElement.src;
natureSize.width = img.width;
natureSizeheight = img.height;
}
return natureSize;
}
// 使⽤
var natural = getNaturalSize (ElementById('img')),
natureWidth = natural.width,
natureHeight = natural.height;
总结
以上就是这篇⽂章的全部内容,希望能对⼤家的学习或者⼯作带来⼀定的帮助。如果有疑问⼤家可以留⾔交流。