常见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. Python中路径操作

    目录 1. os.path模块 2. pathlib模块 2.1 目录操作 2.2 文件操作 3. shutil模块 3.1 os模块 3.2 shutil模块 1. os.path模块 3.4版本之 ...

  2. MySQL配置参数说明

    MYSQL服务器my.cnf配置参数详解: 硬件:内存16G [client] port = 3306 socket = /data/mysql.sock [mysql] no-auto-rehash ...

  3. 使用Maven的assembly插件实现自定义打包

    一.背景 最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有 ...

  4. springcloud情操陶冶-bootstrapContext(三)

    本文则将重点阐述context板块的自动配置类,观察其相关的特性并作相应的总结 自动配置类 直接查看cloudcontext板块下的spring.factories对应的EnableAutoConfi ...

  5. 【Javascript】JS遍历数组的三种方法:map、forEach、filter

    前言 近一段时间,因为项目原因,会经常在前端对数组进行遍历.处理,JS自带的遍历方法有很多种,往往不加留意,就可能导致知识混乱的现象,并且其中还存在一些坑.前端时间在ediary中总结了js原生自带的 ...

  6. 前端性能核对表Checklist-2018

    前端性能核对表Checklist-2018 1. 计划与度量 Get Ready: Planning and Metrics ☐ Establish a performance culture. ☐ ...

  7. Java并发——synchronized关键字

    前言: 只要涉及到Java并发那么我们就会考虑线程安全,实际上能够实现线程安全的方法很多,今天先介绍一下synchronized关键字,主要从使用,原理介绍 一.synchronized的使用方法 1 ...

  8. 并发concurrent---2

    背景:并发知识是一个程序员段位升级的体现,同样也是进入BAT的必经之路,有必要把并发知识重新梳理一遍. 并发concurrent: 使用ThreadLocal可以实现线程范围内共享变量,线程A写入的值 ...

  9. Java运行时环境---ClassLoader类加载机制

    背景:听说ClassLoader类加载机制是进入BAT的必经之路. ClassLoader总述: 普通的Java开发其实用到ClassLoader的地方并不多,但是理解透彻ClassLoader类的加 ...

  10. spring boot整合mybatis方式二

    方式二: pom文件导入maven依赖: <dependency> <groupId>org.springframework.boot</groupId> < ...