js 常用 DOM 元素宽高
提示:document.documentElement 和 document.getElementsByTagName('html')[0] 是一样的;
1、视口大小(不包括滚动条,视口字面理解当然是不包括滚动条),
document.documentElement.clientWidth
document.documentElement.clientHeight
即使给 html 元素显示设置了宽高,返回的值也仍然是视口的尺寸,这是非常特殊的,跟普通 ele.clientWidth 含义不同。
通常情况下,ele.clientWidth 指的是 ele,作为包含块,给于内部元素的一个视口,ele 的尺寸和 clienWidth 是相关的,详情戳clientWidth
按照这个逻辑,我们应该计算 html 的包含块,也就是初始包含块的 clientWidth,但是似乎没有接触初始包含块的接口,仅仅知道,在桌面端,他的尺寸和视口一致;
所以当我们设置
html {
height: 100%;
width: 100%;
}
其实,是将 html 的宽高设置为初始包含块的宽高,等于视口的宽高。
关于 body 的这个属性,如果消除了默认的 margin ,则和上方是相等的:
document.body.clientWidth
document.body.clientHeight
但是如果给 body 显示设置了宽高,返回的就不一定是视口的宽高了,这是普通元素的特性。
另外,浏览器窗口大小(浏览器窗口,自然是包括滚动条的):
window.innerWidth
window.innerHeight
屏幕大小(设备像素,不常用,其实就是分辨率),即使浏览器缩小了,这个值也不会变,是屏幕。
screen.width
screen.height
2、文档大小(包含了超出文档的溢出部分)
document.documentElement.scrollHeight
document.documentElement.scrollWidth
文档大小(不包含超出文档的溢出部分,如果 overflow:hidden,那么和上面的是一致的,但这个属性耗性能)
document.documentElement.offsetHeight
document.documentElement.offsetWidth
3、文档滚动的大小
兼容移动端需要用:
window.pageXOffset
window.pageYOffset
别名 scrollX / scrollY ,IE 不兼容别名,兼容 pageXOffset / pageYOffset,但是 IE9 之前的两个都不兼容;
另一种常用的写法:
document.documentElement.scrollTop;
document.documentElement.scrollLeft;
可写可读,缺点是不兼容移动端;
4、元素相对于视口的位置
ele.getBoundingClientRect(); //包含4 个属性:left、top、right 和bottom
5、元素的大小(border-box,不包含溢出部分,包括溢出的用 )
ele.offsetWidth;
ele.offsetHeight;
元素的大小(border-box 包括溢出的部分,如果溢出隐藏,和上面值一致 )
ele.scrollWidth;
ele.scrollHeight;
6、元素滚动的大小,(应该是相对于包含块) 可写(当然包含块要处于溢出状态才行)
ele.scrollTop;
ele.scrollLeft;
html.scrollTop 相对于初始包含块,所以上文 html.scrollTop 计算文档相对于视口的偏移就是这个道理
7、元素相对于文档的位置(貌似没有原生的 API,推算就是,相对于视口的偏移 + 文档相当于视口的滚动)
ele.getBoundingClientRect().top+document.documentElement.scrollTop;
ele.getBoundingClientRect().left+document.documentElement.scrollLeft;
8、计算滚动条的宽度
function getScrollbarWidth() {
var para = document.createElement('p'),
styles = {
width: '100px',
height: '100px',
overflowY: 'scroll'
},
i, scrollbarWidth;
for (i in styles) { para.style[i] = styles[i]; };
document.body.appendChild(para);
scrollbarWidth = para.offsetWidth - para.clientWidth;
document.body.removeChild(para);
return scrollbarWidth;
}
参考资料:
https://yq.aliyun.com/ziliao/52315
js 常用 DOM 元素宽高的更多相关文章
- js获取隐藏元素宽高的方法
网上有一些js获取隐藏元素宽高的方法,但是可能会存在某些情况获取不了. 例如: <!DOCTYPE html> <html lang="en"> <h ...
- Vue动态设置Dom元素宽高
需求: slider侧边栏是宽度是动态的,使用jquery可以操作dom元素,设置宽高,但vue是避免操作dom的 <template> <div class="slide ...
- 原生JS获取元素宽高实践详解
开篇的话 任何不是亲身实践中求得的知识,都不是属于你的.任何求得的知识不去时常温习运用,也不是属于你的. 记录由来 在做个上拉广告功能中遇到了一个"理所当然"觉得对的用法,慢慢才排 ...
- js获取精确的元素宽高(普通获取高度会有误差)
当js获取元素宽高时, 并不是一个精确的数字,如果想获取真正的宽高大致方法如下 var oStyle = obj.currentStyle ? obj.currentStyle : window.ge ...
- CSS子元素居中(父元素宽高已知,子元素未知)
<style> .container{width:400px; height:400px; position:relative;} .center{position:absolute; l ...
- JS获取图片实际宽高及根据图片大小进行自适应
JS获取图片实际宽高,以及根据图片大小进行自适应 <img src="http://xxx.jpg" id="imgs" onload="ad ...
- JS1 js获取dom元素方法
js获取dom元素方法 1.通过ID选取元素(getElementById) 1)使用方法:document.getElementById("domId") 其 ...
- JS获取图片实际宽高
JS获取图片实际宽高,以及根据图片大小进行自适应 <img src="http://xxx.jpg" id="imgs" onload="ada ...
- 关于Echarts的原生js获取DOM元素与动态加载DOM元素的冲突问题
1.前言: 最近在做的看板项目,因为需要循环加载后台数据,并且用Echarts做数据呈现,所以jQuery和angular等库统统靠边站,Echarts用的是原生js获取DOM元素,至于诸多不兼容等深 ...
随机推荐
- unity, EventType.MouseUp注意事项
如果鼠标移出了窗口范围,则即使鼠标抬起也不会收到EventType.MouseUp消息,所以只写 if(event==EventType.MouseUp){ 执行某操作 } 是错误的,会导致非常奇怪的 ...
- unity, do nothing的state
要想在animator的stateMachine中建一个"doNothing",要注意:为了保证"doNothing"state能正常运转,不被无故跳过, Mo ...
- spawn-fcgi原理及源代码分析
spawn-fcgi是一个小程序,作用是管理fast-cgi进程,功能和php-fpm类似,简单小巧,原先是属于lighttpd的一部分.后来因为使用比較广泛.所以就迁移出来作为独立项目了.本文介绍的 ...
- tracert路由跟踪工具使用方法
1. 路由跟踪在线Tracert工具说明 Tracert(跟踪路由)是路由跟踪实用程序,用于确定 IP 数据报访问目标所采取的路径.Tracert 命令用 IP 生存时间 (TTL) 字段和 ICMP ...
- python中sorted方法和列表的sort方法使用详解
一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符串按照ASCII,中文按照unicode从小到大排序 ...
- CSS3边框圆角知识
<div class="item" data-brief="整圆"> <div class="border-radius" ...
- JS - caller,callee,call,apply
在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments : 该对象代表正在执行的函数和调用它的函数的参数. [function.]argument ...
- hdu 1006 Tick and Tick 有技巧的暴力
Tick and Tick Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- Pgsql排序让空值NULL排在数字后边
遇到一种情况,对数字进行排序的时候,出现NULL在数字后面的情况,现在的需求是NULL排在前面然后才是升序的排数字 [Oracle 结论] order by colum asc 时,null默认被放在 ...
- SpringMVC 之类型转换Converter 源代码分析
SpringMVC 之类型转换Converter 源代码分析 最近研究SpringMVC的类型转换器,在以往我们需要 SpringMVC 为我们自动进行类型转换的时候都是用的PropertyEdito ...