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 相关文章推荐
JavaScript 创建对象和构造类实现代码
Jul 30 Javascript
小议javascript 设计模式 推荐
Oct 28 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
Jan 08 Javascript
php对mongodb的扩展(小试牛刀)
Nov 11 Javascript
JavaScript中的Repaint和Reflow用法详解
Jul 27 Javascript
javascript基础语法学习笔记
Jan 04 Javascript
JS简单生成两个数字之间随机数的方法
Aug 03 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
JS+HTML5 FileReader对象用法示例
Apr 07 Javascript
微信小程序中上传图片并进行压缩的实现代码
Aug 28 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
Sep 14 Javascript
vue backtop组件的实现完整代码
Apr 07 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去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
小程序实现左滑删除功能
2018/10/30 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
js实现一个简易计算器
2020/03/30 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
简单使用Python自动生成文章
2014/12/25 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
python获取当前日期和时间的方法
2015/04/30 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
python实现列表的排序方法分享
2019/07/01 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
Python实现EM算法实例代码
2020/10/04 Python
优秀党支部事迹材料
2014/01/14 职场文书
入党综合考察材料
2014/06/02 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
springboot用户数据修改的详细实现
2022/04/06 Java/Android