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 相关文章推荐
JS OffsetParent属性深入解析
Jan 13 Javascript
JS实现局部选择打印和局部不选择打印
Apr 03 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
May 13 Javascript
JQuery入门基础小实例(1)
Sep 17 Javascript
理解jquery事件冒泡
Jan 03 Javascript
JavaScript引用类型和基本类型详解
Jan 06 Javascript
关于JavaScript数组你所不知道的3件事
Aug 24 Javascript
JS正则表达式修饰符global(/g)用法分析
Dec 27 Javascript
JS实现简单表格排序操作示例
Oct 07 Javascript
微信小程序实战篇之购物车的实现代码示例
Nov 30 Javascript
jquery实现垂直手风琴菜单
Mar 04 jQuery
在Vue中使用mockjs代码实例
Nov 25 Vue.js
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
redis 队列操作的例子(php)
2012/04/12 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
node.js中的require使用详解
2014/12/15 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
对pandas中to_dict的用法详解
2018/06/05 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Python decimal模块使用方法详解
2020/06/08 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
手机业务员岗位职责
2013/12/13 职场文书
会议邀请函范文
2014/01/09 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
小学数学教学反思范文
2016/02/16 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python