HTML代码:

<div style="width: 100px;height: 50px;float: left;background-color: #f5f5f5;">阻碍</div>
<div id="Test">测试
</div>
复制代码

CSS代码:这里css代码没有使用border-box模式,使用的是默认的content-box

* {margin: 0;padding: 0;
}
#Test {border: 10px solid red;padding: 20px;margin: 30px;width: 100px;height: 60px;float: left;overflow: auto;
}
复制代码

js代码:获取DOM元素

let myDom = document.getElementById('Test')
复制代码

图片展示:

演示结果:

一、offsetWidth

// js
let W = myDom.offsetWidth
console.log(W) => // 160W = (border + padding) * 2 + width
复制代码

结论 offsetWidth获取盒子的宽度是包括盒子的边框,内边距和内容宽度等在内相加的结果,是整个盒子的真实宽度,不包括左右外边距

二、offsetHeight

// js
let H = myDom.offsetHeight
console.log(H) => // 120H = (border + padding) * 2 + height
复制代码

结论 offsetHeight获取盒子的高度是包括盒子的边框,内边距和内容高度等在内相加的结果,是整个盒子的真实高度,不包括上下外边距

三、offsetLeft

// js
let OL = myDom.offsetLeft
console.log(IL) => // 130IL = margin-left + 阻碍盒子的宽度
复制代码

结论 offsetLeft是获取盒子当前位置距离自己最近定位的父元素左侧的距离,如果没有最近的定位的父元素,则相当于HTML

四、offsetTop

这一步去掉了阻碍盒子和自身盒子的float: left;属性

let OT = myDom.offsetTop
console.log(IT) => // 80IT = margin-top + 阻碍盒子的高度
复制代码

结论 offsetTop是获取盒子当前位置距离自己最近定位的父元素顶部的距离,如果没有最近的定位的父元素,则相当于HTML

五、clientWidth

let CW = myDom.clientWidth
console.log(CW) => // 140CW = width + padding * 2
复制代码

结论 clientWidth是获取盒子的可视区域宽度,包括padding在内,不包括border,这里是不包括滚动条的情况,如果有滚动条,发现盒子的宽度(width)从100变成83,可知滚动条的宽度为17px,而且是占据盒子内容的宽度,除了可视宽高,似乎其他都没有影响。 Tips 所谓的可视区域,个人理解就是一个盒子里面,能够展示出被人看见的内容区域,就是可视区域,最直接的表现就是一个盒子填充了背景色,这个能被人看见的背景色区域就是可视区域。如下图的绿色背景区域就是可视区域

除非盒子大小改变了,否则可视区域的宽高是不会变得,如下图粉色区域,无论怎么滑动滑块,可视区域永远都是这么大

六、clientHeight

let CW = myDom.clientHeight
console.log(CW) => // 100CW = height + padding * 2
复制代码

结论 clientHeight是获取盒子的可视区域高度,包括padding在内,不包括border,这里是不包括滚动条的情况,如果有滚动条,发现盒子的高度(height)从60变成43,可知滚动条的宽度为17px,而且是占据盒子内容的高度,除了可视宽高,似乎其他都没有影响。

七、clientLeft

let CL = myDom.clientLeft
console.log(CL) => // 10CL = padding-left
复制代码

结论 clientLeft是获取盒子的左边框的宽度,可理解为可视区域和左侧边(这个左侧边不是border)之间的距离

八、clientTop

let CT = myDom.clientTop
console.log(CT) => // 10CT = padding-top
复制代码

结论 clientLeft是获取盒子的上边框的宽度,可理解为可视区域和上侧边(这个上侧边不是border)之间的距离

九、scrollWidth

现在我们要修改一下HTML代码:

<div style="width: 100px;height: 50px;background-color: #f5f5f5;">阻碍</div><div id="Test"><p style="white-space: nowrap;">测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试</p><p style="white-space: nowrap;">测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试</p><p style="white-space: nowrap;">测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试</p><p style="white-space: nowrap;">测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试</p><p style="white-space: nowrap;">测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试</p><p style="white-space: nowrap;">测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试</p></div>
复制代码
let SW = myDom.scrollWidth
console.log(SW) => // 605SW = 盒子内容里面元素占据的真正宽度
复制代码

结论 滚动宽度就是盒子里面元素内容的真正的宽度,就是图中蓝色框两个三角箭头之间的距离加上可视区域宽度

十、scrollHeight

let SH = myDom.scrollHeight
console.log(SH) => // 166SH = 盒子内容里面元素占据的真正高度
复制代码

结论 滚动高度就是盒子里面元素内容的真正的高度,就是图中蓝色框两个三角箭头之间的距离加上可视区域高度

十一、scrollTop

这里不好测试,我们给HTML添加点击事件

<div id="Test" onclick="handleClick()"></div>
let ST = myDom.scrollTop
console.log(ST) => // 初始状态为0,现在我们滑动一下,然后点击,触发事件,再看一下值
handleClick = function () {let ST = myDom.scrollTopconsole.log(ST) => // 将滚动条滑动到底,我们发现ST的值为83,也可以理解为两个三角之间的高度
}
复制代码

结论 通过前面的计算我们知道,滚动条可滚动的高度为166px,而可视内容区域的大小为83px,即滚动条的最大滚动高度为滚动高度(scrollHeight) - 盒子可视高度(clientHeight),不信的话可以自己测试,我这里删除了第六条数据,最后是scrollHeight为145,而ST为62,刚好是145-83=62

十二、scrollLeft

let SL = myDom.scrollLeft
console.log(SL) => // 初始值为0,现在我们滑动一下
handleClick = function (e) {let SL = myDom.scrollLeftconsole.log(SL) => // 将滚动条滑动到底,我们发现SL的值为482,也可以理解为两个三角之间的宽度
}
复制代码

结论 通过前面的计算我们得知,滚动条的可滚动的宽度为605px,而可视内容区域的宽度为123px,即滚动条的最大滚动宽度为滚动宽度(scrollWidth) - 盒子可视宽度(clientWidth)

十三、innerWidth

窗口宽度,也可以理解为window窗口的可视区域宽度,或者说一个页面能够展示内容的区域宽度

let IW = window.innerWidth
// 标准模式下
if (document.documentElement) {let IW = document.documentElement.clientWidth
// 怪异模式
} else {let IW = document.body.clientWidth
}
复制代码

十四、innerHeight

窗口高度,也可以理解为window窗口的可视区域高度,或者说一个页面能够展示内容的区域高度

let IH = window.innerHeight
// 标准模式下
if (document.documentElement) {let IH = document.documentElement.clientHeight
// 怪异模式
} else {let IH = document.body.clientHeight
}
复制代码

Event事件

一、clientX & clientY

鼠标点击或者触屏时,点击位置距离window可视区域左上角的(0, 0)的坐标距离,说白了就是点击的位置距离window可视区域左边的距离和距离window可视区域上边的距离,比如下图:

我们点击绿色区域坐标,来看看对应的值:由上面看出,clientX和clientY并不是距离灰色盒子可视区域左上角的坐标距离,而是距离window可视区域左上角的距离

二、offsetX & offsetY

鼠标点击或者触屏时,点击位置距离自身可视区域左上角的(0, 0)的坐标距离,说白了就是点击的位置距离边框红色边框以内的的粉色区域的左上角的上边和左边的距离,比如下图:

我们点击绿色区域坐标,来看看对应的值:

由上看出,offsetX和offsetY的值,在最下角的时候刚好的可视区域的宽高值,我们还可以看到layerX和layerY两个参数,那两个其实是相当于距离盒子左上角的上左距离,就是红色边框左上角开始

三、pageX & pageY

正常情况下,window的可视区域的是不变的,所以相对于可视区域的坐标也就不会变,无论怎么点,clientX和clientY都是一样的。 而正常情况下,pageX和pageY也是和clientX&clientY相等的,但是从page就可以知道,这个是页面坐标,也就是点击的页面距离window可视区域左上角的坐标距离,一般可视区域是固定的,但是页面大小就不一定是固定的,如果有滚动条,说面页面大小超过了可视区域,这时候点击滚动隐藏区域,pageX&pageY肯定是大于clientX&clientY

四、screenX & screenY

这个就好理解了,屏幕坐标,比如手机屏啊,电脑屏等,从左上角计算,点击的位置距离屏幕的左上角的上左距离

HTML中各种位置距离关系相关推荐

  1. HTML中各种 div 位置距离关系

    HTML中各种 div 位置距离关系 一. 盒模型图片展示: 二. 位置距离计算属性 三. 应用场景 一. 盒模型图片展示: 二. 位置距离计算属性 offsetWidth, offsetHeight ...

  2. 什么是HADOOP、产生背景、在大数据、云计算中的位置和关系、国内外HADOOP应用案例介绍、就业方向、生态圈以及各组成部分的简介(学习资料中的文档材料)

    1. HADOOP背景介绍 1. 1.1 什么是HADOOP 1.        HADOOP是apache旗下的一套开源软件平台 2.        HADOOP提供的功能:利用服务器集群,根据用户 ...

  3. 机器学习中的分类距离

    https://www.toutiao.com/a6710061523777094151/ 生活中,距离通常是用于形容两个地方或两个物体之间的远近.在人工智能机器学习领域,常使用距离来衡量两个样本之间 ...

  4. 【工大SCIR笔记】浅谈Transformer模型中的位置表示

    作者:哈工大SCIR 徐啸 0. 何为位置信息 首先简单谈一下位置信息.一般将位置信息简单分为绝对位置信息和相对位置信息,并且前者对句子语义的影响不大,更为重要的是后者. 以情感分析 (Sentime ...

  5. 基于比例权重的位置加权关系的黑猩猩优化算法

    文章目录 一.理论基础 1.黑猩猩优化算法 2.一种加权的黑猩猩优化算法 二.仿真实验与结果分析 三.参考文献 一.理论基础 1.黑猩猩优化算法 请参考这里. 2.一种加权的黑猩猩优化算法 虽然攻击者 ...

  6. 社交网络中基于位置的影响力最大化 CIKM2015 译文

    社交网络中基于位置的影响力最大化 摘要 这篇文章的目的是通过研究在LBSN平台中基于位置的影响最大化来实现O2O模式上的产品推广.随着O2O环境下存在的消费行为,传统的线上影响力扩散模型不能准确描述产 ...

  7. 【Transformer】Transformer 中的位置编码 -- ICLR 2021

    引言 Transformer是近年来非常流行的处理序列到序列问题的架构,其self-attention机制允许了长距离的词直接联系,可以使模型更容易学习序列的长距离依赖.由于其优良的可并行性以及可观的 ...

  8. 如何设置文字的位置html5,怎么设置文字在表格中的位置

    表格中的文字默认都是顶格的导致有的时候看起来特别的不美观,那么怎样才能让它们排版更加好看呢,这里详细介绍了怎么操作,让我们一起看看吧! 一.设置文字在表格中的位置 在表格中添加文字后,默认的文字位置为 ...

  9. 深入理解transformer中的位置编码

    文章目录 总览 问题1 问题2 问题3 问题4 问题5 问题6 总览 我们今天需要讲解transformer中的位置编码,这其实属于进阶内容.既然你会到这里,我默认你已经看过了transformer的 ...

最新文章

  1. 谷歌将AutoML应用于Transformer架构,翻译结果飙升,已开源!
  2. 邓西百度网盘多帐号文件一键搜索工具
  3. 《数据库系统实训》实验报告——事务的应用
  4. sqlserver改主键初始ID
  5. LeetCode刷题(Python)——在排序数组中查找元素的第一个和最后一个位置
  6. 功能暴强的页面验证js代码
  7. 线上售楼处,卖房神器还是营销噱头?
  8. 《相关性准则——大数据时代的高效能之道》一一2.3 数字信息
  9. Jmeter集成Jira提交缺陷
  10. RGSSAD解密程序(基于RgssadUnpacker改进以支持RGSS3A)
  11. 为什么总是封板又打开涨停_多次涨停多次被打开,涨停板打开然后封住反复
  12. dell笔记本耳机怎么设置_戴尔笔记本电脑怎样设置耳机
  13. 现在才知道,菊花茶可不能随便喝!
  14. win10/11如何安装安卓app?带你使用华为移动应用引擎
  15. 达朗贝尔力挺无穷小的存在性
  16. MySQL索引优化(二)索引失效
  17. 关于虚拟机上fedora14不能上网的问题解决
  18. selenium中添加cookies的方法 python
  19. Egret使用Box2D
  20. 正则表达式的正数校验

热门文章

  1. python中的open函数实例_Python中open函数注意点
  2. mysql noinstall 布署_mysql-noinstall.zip免安装版的优化配置和精简
  3. do{}while(0) 作用
  4. SHELL脚本 基础一
  5. 兼容浏览器_你知道什么是跨浏览器兼容吗?
  6. PHP 接收 UDP包_PHP早已不是十年前的鸟样!!!
  7. GT Transceiver中的重要时钟及其关系(5)QPLL的工作原理介绍
  8. 【 C 】assert.h 简明介绍
  9. Leaf:GO语言游戏框架介绍及入门
  10. ThinkPHP实现静态缓存和动态缓存