常见clientWidth、clientHeight、offsetWidth、offsetLeft,clientX、scrollTop等词语,比较混乱,现在总结下他们的区别。

1. clientWidth:元素的宽度(width+padding),offsetWidth相比clientWidth,多个border的值 ( width+padding+border)。clientHeight 、 offsetHeight略

//某个元素的宽度和高度
var div1 = document.getElementById('div1');
console.log('元素的宽width+padding', div1.clientWidth ); //body的宽度
console.log('body的宽',document.body.clientWidth); //可视区的宽度,也就是html的宽度
console.log('可视区的宽', document.documentElement.clientWidth ); //可视区的宽度高度:你可以调整浏览器窗口大小调整的,body的高度不设置的话是根据内容来的,内容少,浏览器不出现滚动条,body的高度小于可视区高度,内容多,浏览器出现滚动条,body的高度大于可视区高度。

但是css3有个属性:box-sizing

box-sizing: content-box|border-box|inherit

比如,div1设置

     <style type="text/css">
#div1 {
width: 200px;
height: 200px;
padding: 50px;
border: 10px solid #000000;
}
</style>

box-sizing默认是content-box,就是width不包含padding和border的模式,测试,IE7+及其他浏览器正常,显示 clientWidth为50+200+50=300,offsetWidth为10+50+200+50+10=320,多了2边的border。

IE6下clientWidth为180,offsetWidth为200,因为6下的width是包含padding和border的,但是没人用ie6了,不细说

但是说明一个问题,clientWidth显示的很准确,就是实际width+padding的值,ie6下这个值比较小,也显示小了。

div1加上 box-sizing:border-box;再看看什么反应,IE7不认识 box-sizing:border-box; 出现结果和不加 box-sizing:border-box;一样,其他浏览器都是 clientWidth为180,offsetWidth为200。

结论就是:

1.clientWidth的值挺准确的,去掉边框的“盒子”占多少像素就显示多少像素。box-sizing的设置影响到了实际显示,也自然的影响到了clientWidth的值。

2.offsetWidth就是clientWidth加上两边border

3.clientWidth的值可以读,但是不能写。例如写: div1.clientWidth = 500; div1并不会变大,有些浏览器报警告或错误。

2. clientX,clientY是事件中的概念, 鼠标点击时候距离可视区的左侧和上侧坐标,数据是在事件的细节的event对象中

         document.onclick = function (ev) {
//IE和谷歌用window.event
//火狐等用事件函数的第一个参数
var ev = ev || window.event;
console.log(ev.clientX,ev.clientY);
}

3.scrollTop、scrollLeft 是指页面内容太长,有滚动条了,已经滚动的距离。上面clientX和clientY都是针对可视区的,但是很多时候,我们想知道的是针对页面内容的距离,才方便我们下一步定位等操作,所以要结合scrollTop、scrollLeft使用

但是,但是,要注意:scrollTop它们存在兼容性问题。

浏览器出现滚动条是谁的? 答:只有谷歌浏览器认为滚动条是body的(document.body.scrollTop),其他浏览器都认为是html的,也就是可视区的(document.documentElement.scrollTop),为了在有限的范围显示大页面,才出现的滚动条。为了兼容,代码如下:

        //有scrollTop和scrollLeft,没有scrollBottom和scrollRight
document.onscroll = function(){
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
console.log(scrollTop);
}

4. 待续

js获取元素宽高、位置相关知识汇总的更多相关文章

  1. JS获取元素宽高的两种情况

    JS获取元素宽高分两种情况, 一.内联样式,也就是直接把width和height写在HTML元素中的style里: 这种情况使用     document.getElementById('xxx'). ...

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

    开篇的话 任何不是亲身实践中求得的知识,都不是属于你的.任何求得的知识不去时常温习运用,也不是属于你的. 记录由来 在做个上拉广告功能中遇到了一个"理所当然"觉得对的用法,慢慢才排 ...

  3. js 获取元素宽高

    可以用源生js的.offsetHeight .offsetWidth属性 document.getElementById("temp_form").offsetHeight // ...

  4. js 获取元素宽

    第一种情况就是宽高都写在样式表里,就比如#div1{width:120px;}.这中情况通过#div1.style.width拿不到宽度,而通过#div1.offsetWidth才可以获取到宽度. 第 ...

  5. JS获取网页宽高方法集合

    JS获取网页宽高等方法的集合:document.body.clientWidth - 网页可见区域宽document.body.clientHeight - 网页可见区域高 document.body ...

  6. 原生js获取元素的各种位置(大全)

    加给元素: offsetLeft (距离定位父级的距离) offsetTop (距离定位父级的距离) offsetWidth (可视宽度) offsetHeight (可视高度) clientLeft ...

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

    我以前一直以为微信小程序不能动态获取view元素的宽高.但是自从看到: wx.createSelectorQuery() 这个api接口,以前的某些问题就能得到解决了... 那么,这个api接口怎么用 ...

  8. 滚动加载图片(懒加载)实现原理(这是旧实现,仅做为获取元素宽高api的参考)

    https://www.cnblogs.com/flyromance/p/5042187.html 本文主要通过以下几方面来说明懒加载技术的原理,个人前端小菜,有错误请多多指出 一.什么是图片滚动加载 ...

  9. js获取各种宽高方法

    屏幕的有效宽高: window.screen.availHeightwindow.screen.availWidth 网页可见区域宽:document.body.clientWidth 网页可见区域高 ...

随机推荐

  1. 【Android Studio安装部署系列】九、Android Studio常用配置以及快捷键

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 整理Android Studio的常用配置和快捷键. 常用配置 显示行号 临时显示 永久显示 File——Settings——Edi ...

  2. Linux - 通过SecureCRT的rz、sz和sftp实现文件的上传和下载

    目录 1 通过rz/sz命令上传/下载 1.1 安装lrzsz软件 1.2 rz - 上传文件 1.3 sz - 下载文件 2 通过sftp上传/下载文件 2.1 关于SFTP的简介 2.2 SFTP ...

  3. 什么是Servlet(原理,从访问到方法)

    Servlet简介 Servlet是SUN公司提供的一门用于开发动态WEB资源的技术.SUN公司在其API中提供了一个Servlet接口,用户若想开发一个动态WEB资源(即开发一个Java程序向浏览器 ...

  4. 将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定

    1.前言 前段时间,自己搞了个阿里云的服务器.想自己在上面折腾,但是不想因为自己瞎折腾而污染了现有的环境.毕竟,现在的阿里云已经没有免费的快照服务了.要想还原的话,最简单的办法就是重新装系统.而一旦重 ...

  5. VC6.0打开或添加工程时崩溃的解决方法

    官方解决办法(英文):http://support.microsoft.com/kb/241396/en-us 网友解决(中文):http://blog.163.com/wjatnx@yeah/blo ...

  6. element-ui 动态换肤

    1.在安装好 element-ui@2.x 以后,首先安装sass-loader npm i sass-loader node-sass -D 2.安装 element-theme npm i ele ...

  7. SmartSql Zookeeper分布式配置

    安装 SmartSql.ZooKeeperConfig Install-Package SmartSql.ZooKeeperConfig Demo string connStr = "192 ...

  8. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2版本正式发布

     RDIFramework.NET .NET快速信息化系统开发框架 V3.2版本 正式发布 精益求精求完美! 1.RDIFramework.NET框架介绍 RDIFramework.NET,基于.NE ...

  9. springcloud情操陶冶-springcloud config server(一)

    承接前文springcloud情操陶冶-springcloud context(二),本文将在前文基础上浅析下ConfigServer的工作原理 前话 根据前文得知,bootstrapContext引 ...

  10. 时间序列算法(平稳时间序列模型,AR(p),MA(q),ARMA(p,q)模型和非平稳时间序列模型,ARIMA(p,d,q)模型)的模型以及需要的概念基础学习笔记梳理

    在做很多与时间序列有关的预测时,比如股票预测,餐厅菜品销量预测时常常会用到时间序列算法,之前在学习这方面的知识时发现这方面的知识讲解不多,所以自己对时间序列算法中的常用概念和模型进行梳理总结(但是为了 ...