宽高和位置
在JS中我们需要学习DOM元素和页面的宽高及位置。本期小编就元素及页面宽高和位置做出详细解说。
一: 元素宽高

1)三种元素宽高
 元素.clientWidth 客户宽高
 元素.clientHeight元素.offsetWidth 偏移宽高
 元素.offsetHeight元素.scrollWidth 滚动宽高
 元素.scrollHeight

以上所有的宽高,基于元素被加入到DOM渲染树后,也就是被添加在页面中以后,才可以获取
如下面代码;

console.log(div.clientWidth);//无法获取
 document.body.appendChild(div);
 console.log(div.clientWidth);//获取到了

并且图片这类后加载元素无法获取宽高 (异步原因造成)
异步 当运行某个需要一段时间完成的内容时,可以先继续向后执行代码,加载和执行后面是同时进行的
同步 上一步执行完成再执行下一步
2)三者区别

getComputedStyle(div).width;//获取元素宽高为50px padding值20px
 (div.clientWidth,div.clientHeight;
 2.1) 没有滚动条的时候 70px width+padding ‘
 2.1)有滚动条 width+padding-17(滚动条宽高)
 div.offsetWidth,div.offsetHeight;
 2,2) 74px width+padding+border 实际这个div的占位宽高
 div.scrollWidth,div.scrollHeight;
 2.3)没有滚动条 70px width+padding
 2.3) 有滚动条 因为内容宽度不同,实际内容宽度+padding

二: 页面宽高

document.body (body)
 document.documentElement (html)

1,1)body的clientHeight和clientWidth
页面宽度-16(默认8个像素的宽度) 高度0(因为没有内容)如果有内容会撑开
元素有多高,就会撑开多少 ,宽度是可视宽度

document.body.clientWidth,document.body.clientHeight;
2.1)html的clientHeight和clientWidth
 获取页面的可视宽高 ,并不会因为内容变大而撑开
 document.documentElement.clientWidth,document.documentElement.clientHeight;1.2) body的offsetWidth和clientWidth相同
 document.body.offsetWidth,document.body.offsetHeight;2.2) html的offsetwidth和offsetHight
 无内容是获取页面的可视宽度,高度是8
 有内容,宽度仍然是可视宽度,html的高度是body内容高度+bodyMargin
 document.documentElement.offsetWidth,document.documentElement.offsetHeight;1.3) body的scrollwidth和scrollHight;
 没有内容时和body的clientWidth相同
 有内容,内容撑开的宽高,和clientHeight相同,内容宽度
 document.body.scrollWidth,document.body.scrollHeight;2.3) HTML的scrollWH
 如果没有body没有高度,则是可视宽高
 如果body有宽高,不超过可视宽高,则是可视宽高
 如果body的宽高超出可视范围,则是body宽高+margin(宽度+margin,高度+margin*2)
 document.documentElement.scrollWidth,document.documentElement.scrollHeight;3、总结;
 1、内容高度 console.log(document.body.clientHeight);
 2、可视宽高 document.documentElement.clientWidth,document.documentElement.clientHeight
 3、有滚动条时,内容宽高 document.body.scrollWidth,document.body.scrollHeight;

二 、 位置

clientLeft clientTop
 offsetLeft offsetTop
 scrollLeft scrollTop

二.1、 元素位置

1、 边线宽高(border值)
 div1.clientLeft,div1.clientTop;2、 没有定位时,相对页面的左上顶角位置
 如果定位 相对父容器左上角位置 和css中left,top相同
 div1.offsetLeft,div1.offsetTop;3、 是元素上的滚动条位置 仅这两个属性可以设置
 div1.scrollLeft,div1.scrollTop;
 如;div1.scrollTop=157;
 (div1.scrollHeight-div1.clientHeight这个就是最大滚动位置,到底4、 操作滚动条触发执行函数
 div1.οnscrοll=function(){
 console.log(div1.scrollTop);//获取滚动条位置5、IE8以后才有的方法
 获取元素的矩形界限范围
 var rect=div1.getBoundingClientRect();
 {
 width, //offsetWidth
 height, //offsetHeight
 left, //最左边到可视窗口的距离
 top, //最顶部到可视窗口的距离
 right,//left+width 最右边到可视窗口的距离
 bottom,//top+height 最下面到可视窗口的距离
 x, //left
 y //top
 }6、总结;
 6.1、offsetLeft、offsetTop,定位后元素相对父容器的距离
 6.2、scrollLeft,scrollTop,元素内的滚动条位置
 6.3、 getBoundingClientRect()获取元素的矩形界限范围

二.2 、 html body

1、 body 和 html没有边线,所有这两个值都是0
 (document.body.clientLeft,document.body.clientTop
 document.documentElement.clientLeft,document.documentElement.clientTop2、 因为body和html标签都是最顶端,最外层,这两个值都是0
 document.body.offsetLeft,document.body.offsetTop
 document.documentElement.offsetLeft,document.documentElement.offsetTop3、 window.οnscrοll=function(){
 document.body.scrollTop,早起谷歌浏览器和苹果浏览器是body
 而现在window的滚动条是document.documentElement的scrollTop
 document.documentElement.scrollTop,
 }
 并且 document.documentElement.scrollTop=200;

4、总结;
window窗口的滚动条位置获取和设置 document.documentElement.scrollLeft和document.documentElement.scrollTop