js获取元素宽高

只说ie8+的浏览器的方法。

在转vue之前,一直使用jquery来获取元素的高度,最近转vue,发现了一个问题。使用vue的时候,部分操作需要在mounted这个生命周期里面去做,官网对mounted的解释是:

如果不在vm.$nextTick里面做操作的时候,是很有可能获取不到组件内部元素的宽高的。刚开始的时候,我没有仔细看官网,所以在mounted里面是直接获取不到子孙元素的宽高的。

  后来,看了iview的一个组件的源码,看到了getComputedStyle方法获取宽高,对getComputedStyle好奇起来。下面梳理一下,怎么使用js获取元素的宽高的几种比较靠谱的方法。

  1. window.getComputedStyle(dom, null).styleName   获取宽高的话,styleName分别对应width、height

    • 返回值: string
    • 兼容性:caniuse.com上面兼容到ie11,我测试的是ie9+
    • 获取到的string类型,以px为单位,做数值操作的话,需要转成number类型
    • 获取到的是不包括边框、内边距以及滚动条的宽高值,在元素隐藏或者还未渲染到页面上的时候,也可以获取宽高
    • 至于其他的操作,请自行查阅资料,不做展开
  2. dom.clientWidth/dom.clientHeight 
    • 返回值:number
    • 获取元素可见内容区域的宽/高,包括内边距,不包括边框和滚动条  
  3. dom.offsetWidth/dom.offsetHeight
    • 返回值:number
    • 获取元素可见区域的宽高,包括内边距、边框、滚动条
  4. dom.scrollWidth/dom.scrollHeight
    • 返回值:number
    • 获取元素内容区域的宽高。这地方又分了两种情况:1.当内容区的宽高没有超出元素的宽高时,则等于clientWidth/clientHeight;2.一旦超出的话,则等于内容区域的宽度+元素左边内边距的值

可以看下面的实例:

html代码:

<div class="parent">
     <div class="child"></div>
</div>

css代码:

.parent{
    width: 600px;
    border: 1px solid #ccc;
    padding: 30px;
    height: 100px;
    margin: 100px auto 0;
    background: red;
    overflow: auto;
}
.child{
    width: 700px;
    height: 200px;
}

js代码:

var dom = document.getElementsByClassName("parent")[0];
var w0 = dom.style.width,   //不建议
      w1 = window.getComputedStyle(dom, null).width,
      w2 = dom.clientWidth ,
      w3 = dom.offsetWidth,
      w4 = dom.scrollWidth;
console.log(w0);
console.log(typeof w0);
console.log(w1);
console.log(w2);
console.log(w3);
console.log(w4);  

结果输出:

时间: 2024-12-22 04:58:22

js获取元素宽高的相关文章

各种情况上JS获取元素宽高

各种情况下JS获取元素宽高 为了叙述简单,这里仅拿width示例. 情景一,元素style属性设置了width/height <div style="width:996px">test<div><script> var div = document.getElementsByTagName('div')[0]; alert(div.style.width);</script>默认分类 如上,使用el.style.width即可. 如果没有

原生JS获取元素宽高实践详解

开篇的话 任何不是亲身实践中求得的知识,都不是属于你的. 任何求得的知识不去时常温习运用,也不是属于你的. 记录由来 在做个上拉广告功能中遇到了一个"理所当然"觉得对的用法,慢慢才排查出是获取元素高度那里出了问题,这个问题记忆在书上或视频中看到过,许久没用,用的时候就想当然了.遂决定深入剖析用法,增加记忆,记录发表出来,也能给各位前端同行.求学者增加印象. 出错之处 秉承结构.样式.行为分离的宗旨,每次不管大小案例都是分开写html.css.js.这也算抛砖引出了我犯错的玉. 原css

js获取浏览器宽高、网页宽高、屏幕宽高、鼠标位置等(带图片说明)

网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;(点击查看大图) 网页可见区域宽: document.body.offsetWidth (包括边线的宽);网页可见区域高: document.body.offsetHeight (包括边线的宽);(点击查看大图)有没有发现,offsetWidth和clientWidth的区别,offsetWidt是连滚动条一起包含在内的. 网页正文全文宽: documen

JS获取网页宽高方法集合

JS获取网页宽高等方法的集合:document.body.clientWidth - 网页可见区域宽document.body.clientHeight - 网页可见区域高 document.body.offsetWidth - 网页可见区域宽,包括边线和滚动条的宽document.body.offsetHeight - 网页可见区域高,包括边线和滚动条的高[FF,chrom下是整个页面高,IE opera 下正常] document.body.scrollWidth - 网页总宽documen

微信小程序之动态获取元素宽高

我以前一直以为微信小程序不能动态获取view元素的宽高.但是自从看到: wx.createSelectorQuery() 这个api接口,以前的某些问题就能得到解决了... 那么,这个api接口怎么用呢? 首先,这个接口会返回一个对象实例. var obj=wx.createSelectorQuery(); 下面的就是返回的对象实例 obj 的所有内容. 返回的 obj 有五个方法: 1.  obj.in(component):没用过这个方法,多用于组件的选择器. 2.   obj.select

js获取各种宽高

1.窗口和浏览器 window.innerWidth.window.innerHeight   浏览器内部可用宽高 window.outerWidth.window.outerHeight   浏览器整体宽高 window.screenTop(Firefox采用screenX)    浏览器左上角距离屏幕顶端的距离(IE.Opera.Chrome中如果紧贴屏幕顶部的话,则Top为浏览器工具栏的高度,而Firefox则为0)window.screenLeft((Firefox采用screenY)

js 获取图片宽高 和 图片大小

获取要查看大小的img varimg_url = 'http://img5.imgtn.bdimg.com/it/u=4267222417,1017407570&fm=200&gp=0.jpg'   // 创建img对象 var img = new Image();   // 改变图片的src img.src = img_url;   // 加载完成执行 img.onload = function(){   // 打印   alert('width:'+img.width+',height

javascript 获取元素宽高

style.width,clientWidth,offsetWidth <!doctype html> <html> <head> <meta charset="utf-8"> <title>document</title> <style> div{ padding:40px 50px;} #div1 { background:red;} #div2 { background:blue; positio

javascript DOM元素宽高

获取元素位置 offsetLeft 元素相对于父元素的左边距离 offsetHeight 元素相对于父元素上部的距离 offsetLeft和style.left的区别 offsetLeft是只读的:style.left是可读写的,要改变元素的位置,只能使用style.left offset返回的是一个Number:style.left返回的是字符串,如“30px” style.left需要在HTML中直接定义.在CSS样式表中定义,是无法获取这个属性的 这里引出一点: 如果要获取元素属性的话,这