JS获取IMG图片高宽的简单实例


Posted in Javascript onMay 17, 2016

前段时间在LJW写的touchslider.js轮播代码里添加自适应屏幕大小的功能时,遇到一个问题。不管用什么样的方法都无法获取到IMG标签的高宽,最后只有给图片定一个高宽的比例值;趁今天有空我就写了几个demo测试了下,找了下原因;且听我细细说来,如有哪里说的不对的,欢迎拍砖~~~ 

首先获取高宽的方法具我所知有:

obj.style.width(height);

obj.offsetWidth(offsetHeight);

obj.clientWidth(clientHeight);

getComputedStyle 与 currentStyle;

obj.naturalWidth(naturalHeight) 

为了叙述简单,这里仅为width为例。 

先说第一个方法:obj.style.width;这个方法,只有在标签里用style属性写进了width的大小,才可以获取到值,否则只返回的为空。看下面的demo:

<img style="width:400px" src="http://img.hb.aicdn.com/787bf87d05ad774522dd92151b3051b463229a11109598-9QXV9C_fw658">
<script>
var imgW = document.getElementsByTagName('img')[0].style.width;
  alert(imgW); //返回值为400px,否则返回空;
</script>

以上这个方法只适应用标签的style属性里添加width值,在引入的样式表中添加width值(不管是link引入还是html页面中使用style标签)也一样获取不到值,返回为空。 

然后说一下第二个方法与第三个方法obj.offsetWidth(offsetHeight); obj.clientWidth(clientHeight);一般情况下,如果标签没有设置padding值及border值,那么它们两个获取到的值是一样的。但很多情况下都不是这样的,其实offsetWidth得到的是width值+padding值+border值,clientWidth得到的是width值+padding值,看下面的demo:

<style>
img{ padding:20px;border:1px solid red;}
</style>
<img style="width:400px" src="http://img.hb.aicdn.com/787bf87d05ad774522dd92151b3051b463229a11109598-9QXV9C_fw658">
<script>
var img = document.getElementsByTagName('img')[0], 
      imgOffsetWidth = img.offsetWidth, //442px
      imgClientWidth = img.clientWidth; //440px;
</script>

注意,现在获取到的img标签的宽,是在img标签里添加的style=”width:400px” 。如果去掉这一属性值,那么上面demo里的imgOffsetWidth与imgClientWidth返回的值就是图片本身的高宽值。可以偿试下。 

另处,getComputedStyle 与 currentStyle是处理兼容性的两个方法,获取到的值都是图片在屏幕上显示的仅仅图片的高宽值,不会获取到img标签的padding及border值;但其中getComputedStyle适用于Firefox/IE9/Safari/Chrome/Opera浏览器,currentStyle适用于IE6/7/8。但是如果img标签即使没有设置style属性也没有引入样式表,那么只有getComputedStyle能获取到值,即为图片本身高宽值,currentStyle则返回auto。下面有一个demo:

<img style="width: 400px;" src="http://img.hb.aicdn.com/787bf87d05ad774522dd92151b3051b463229a11109598-9QXV9C_fw658">

  <script>
    function getStyle(el, name) {
      if(window.getComputedStyle) {
        return window.getComputedStyle(el, null)[name];
      }else{
        return el.currentStyle[name];
      }
    }
    var div = document.getElementsByTagName('img')[0];
    alert(getStyle(div, 'width'));
  </script>

可以把img标签里的style属性去掉再测试下。 

最后就是obj.naturalWidth(naturalHeight)方法,这是HTML5里新添加的一个获取元素高宽的方法,但只适用于Firefox/IE9/Safari/Chrome/Opera浏览器。下面有一个适用于各个浏览器的demo:

<img style="width: 400px;" src="http://img.hb.aicdn.com/787bf87d05ad774522dd92151b3051b463229a11109598-9QXV9C_fw658">

  <script>
    document.addEventListener('DOMContentLoaded',function(){
      function getImgNaturalStyle(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]
      }
      var img = document.getElementsByTagName('img')[0],
          imgNatural = getImgNaturalStyle(img);
      alert(imgNatural);
    });
  </script>

需要注意是的在IE6/7/8浏览器中image.src只有在img图片完全加载出来以后才获取得到,否则会报错。

提到图片的完全加载,就解决了上次我跟LJW遇到的那个怎么都获取不到图片高度问题; 

document.addEventListener("DOMContentLoaded",function(){

    //原因就是当时我们的代码是在这样的环境下写的,这个时候,只是加载了img的标签,即只有DOM结构,图片还没有完全加载进来,所以获取到的值都是0,但如果在window.onloaded的环境下写,就能得到其所示高宽了

});

也就是说,以上能够获取到图片高宽的方法都要以图片已经完全加载为前提。

好了,以我的能力就只能理解到这儿了,如有不妥之处,欢迎拍砖~~

以上这篇JS获取IMG图片高宽的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
js密码强度实时检测代码
Mar 02 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
Nov 17 Javascript
JavaScript获取服务器时间的方法详解
Dec 11 Javascript
C#微信小程序服务端获取用户解密信息实例代码
Mar 10 Javascript
vue拦截器Vue.http.interceptors.push使用详解
Apr 22 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
Dec 07 Javascript
angular2路由之routerLinkActive指令【推荐】
May 30 Javascript
node.js到底要不要加分号浅析
Jul 11 Javascript
p5.js实现简单货车运动动画
Oct 23 Javascript
vue3中provide && inject的使用
Jul 01 Vue.js
简单的分页代码js实现
May 17 #Javascript
Js获取图片原始宽高的实现代码
May 17 #Javascript
创建一个类Person的简单实例
May 17 #Javascript
jQuery Mobile操作HTML5的常用函数总结
May 17 #Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
May 17 #Javascript
基于Bootstrap3表格插件和分页插件实例详解
May 17 #Javascript
Winform客户端向web地址传参接收参数的方法
May 17 #Javascript
You might like
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
深入理解Python变量与常量
2016/06/02 Python
python实现多线程抓取知乎用户
2016/12/12 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
python 生成器需注意的小问题
2020/09/29 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
.net面试题
2016/09/17 面试题
银行求职推荐信范文
2013/11/30 职场文书
工作态度检讨书
2014/02/11 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
党建工作先进材料
2014/05/02 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
优秀大学生自荐信
2015/03/26 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
看上去很美观后感
2015/06/10 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS
解决Redis启动警告问题
2022/02/24 Redis
JS高级程序设计之class继承重点详解
2022/07/07 Javascript