Javascript获取图片原始宽度和高度的方法详解


Posted in Javascript onSeptember 20, 2016

前言

网上关于利用Javascript获取图片原始宽度和高度的方法有很多,本文将再次给大家谈谈这个问题,或许会对一些人能有所帮助。

方法详解

页面中的img元素,想要获取它的原始尺寸,以宽度为例,可能首先想到的是元素的innerWidth属性,或者jQuery中的width()方法。

如下:

<img id="img" src="1.jpg">

<script type="text/javascript">
 var img = document.getElementById("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 = document.getElementById("img");
 console.log(img.innerWidth); // 400
</script>

jQuery的width()方法在底层调用的是innerWidth属性,所以width()方法获取的宽度也不是图片的原始宽度。

那么该怎么获取img元素的原始宽度呢?

naturalWidth / naturalHeight

HTML5提供了一个新属性naturalWidth/naturalHeight可以直接获取图片的原始宽高。这两个属性在Firefox/Chrome/Safari/Opera及IE9里已经实现。

如下:

var naturalWidth = document.getElementById('img').naturalWidth,
 naturalHeight = document.getElementById('img').naturalHeight;

naturalWidth / naturalHeight在各大浏览器中的兼容性如下:

Javascript获取图片原始宽度和高度的方法详解

图片截取自http://caniuse.com/#search=naturalWidth

所以,如果不考虑兼容至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 (document.getElementById('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 (document.getElementById('img')),
 natureWidth = natural.width,
 natureHeight = natural.height;

总结

以上就是这篇文章的全部内容,希望能对大家的学习或者工作带来一定的帮助。如果有疑问大家可以留言交流。

Javascript 相关文章推荐
javascript 控制弹出窗口
Apr 10 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
Dec 06 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
Dec 30 Javascript
解析浏览器端的AJAX缓存机制
Jun 21 Javascript
AngularJS ng-template寄宿方式用法分析
Nov 07 Javascript
JS简单获取当前日期和农历日期的方法
Apr 17 Javascript
快速解决vue-cli不能初始化webpack模板的问题
Mar 20 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
Sep 05 Javascript
学习node.js 断言的使用详解
Mar 18 Javascript
微信小程序中显示倒计时代码实例
May 09 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 Javascript
原生JS实现相邻月份日历
Oct 13 Javascript
AngularJS 过滤器(自带和自建)详解
Sep 19 #Javascript
js Canvas实现圆形时钟教程
Sep 19 #Javascript
Bootstrap模态框调用功能实现方法
Sep 19 #Javascript
javascript实现的上下无缝滚动效果
Sep 19 #Javascript
Angular ng-class详解及实例代码
Sep 19 #Javascript
javascript实现的左右无缝滚动效果
Sep 19 #Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
Sep 19 #Javascript
You might like
PHP nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
浅析php学习的路线图
2013/07/10 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
利用PHP生成静态html页面的原理
2016/09/30 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
几个高效,简洁的字符处理函数
2007/04/12 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
javascript 节点排序 2
2011/01/31 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python中unittest用法实例
2014/09/25 Python
Python使用Scrapy爬取妹子图
2015/05/28 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
Django框架中方法的访问和查找
2015/07/15 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
python编写猜数字小游戏
2019/10/06 Python
如何基于Python创建目录文件夹
2019/12/31 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
实习自我鉴定范文
2013/10/30 职场文书
银行求职信个人范文
2013/12/16 职场文书
自我评价是什么
2014/01/04 职场文书
男方父母证婚词
2014/01/12 职场文书
学生旷课检讨书500字
2014/10/28 职场文书
怎样写观后感
2015/06/19 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书