当前位置: 首页 > news >正文

【JS基础】--位置距离小结

名词解释

  • screen:屏幕。这一类取到的是关于屏幕的宽度和距离,与浏览器无关,应该是获取window对象的属性。
  • client:使用区、客户区。指的是客户区,当然是指浏览器区域。
  • offset:偏移。指的是目标甲相对目标乙的距离。
  • scroll:卷轴、卷动。指的是包含滚动条的的属性。
  • inner:内部。指的是内部部分,不含滚动条。
  • avail:可用的。可用区域,不含滚动条,易与inner混淆。

特别注意:

  • body:DOM对象里的body子节点,即 <body> 标签。(未声明<!DOCTYPE html>)
  • documentElement:整个节点树的根节点root,即<html> 标签。(未声明<!DOCTYPE html>)

使用body或者documentElement在于是否声明了<!DOCTYPE html>

即:在标准w3c下(声明了<!DOCTYPEhtml>),document.body.scrollTop恒为0,需要用document.documentElement.scrollTop来代替,ie5.5之后已经不支持document.body.scrollX对象了。

  • 所以在编程的时候,请加上这样的判断
if (document.body && document.body.scrollTop && document.body.scrollLeft)
{
&emsp;&emsp;top=document.body.scrollTop;
&emsp;&emsp;left=document.body.scrollleft;    
}
if (document.documentElement && document.documentElement.scrollTop && document.documentElement.scrollLeft)
{
&emsp;&emsp;top=document.documentElement.scrollTop;
&emsp;&emsp;left=document.documentElement.scrollLeft;
}
复制代码

Window对象

获取设备屏幕的高度和宽度(屏幕分辨率):

window.screen.height
window.screen.width
复制代码

获取屏幕工作区域的高度和宽度(去掉状态栏):

window.screen.availHeight
window.screen.availWidth
复制代码

浏览器可见区域的内宽度、高度(不含浏览器的边框,但包含滚动条):

window.innerHeight
window.innerWidth
复制代码

浏览器的位移(浏览器与屏幕左上角的距离)

window.screenLeft/screenTop (兼容:ie6/7/8/9/10、chrome)
window.screenY/screenX  (兼容:ie9/10、chrome、firefox)
* 注意:ie浏览器的内边缘距离屏幕边缘的距离,chrome浏览器的外边缘距离屏幕边缘的距离。 
复制代码

滚动条偏移距离(滚动条滚动距离)

window.pageXOffset/pageYOffset(兼容:ie9/10、chrome、firefox。)
window.scrollX/scrollY(兼容:chrome、firefox)
复制代码

document对象

滚动条偏移距离(滚动条滚动距离)

document.body.scrollTop
document.body.scrollLeft
document.documentElement.scrollTop
document.documentElement.scrollLeft
复制代码

网页可见区域的高度和宽度(不加边线):

document.body.clientHeight
document.body.clientWidth
document.documentElement.clientHeight
document.documentElement.clientWidth
复制代码

网页全文的高度和宽度:滚动条总高度(含边线)

document.body.scrollHeight
document.body.scrollWidth
document.documentElement.scrollHeight
document.documentElement.scrollWidth
复制代码

网页全文的高度和宽度:滚动条总高度(不含边线):

document.body.offsetHeight
document.body.offsetWidth  
document.documentElement.offsetHeight
document.documentElement.offsetWidth  
复制代码

element对象

有滚动条时:clientWidth=元素左内边距宽度+元素宽度+元素右内边距宽度-元素垂直滚动条宽度

无滚动条时:clientWidth=元素左内边距宽度+元素宽度+元素右内边距宽度

elment.clientWidth/clientHeight
兼容:chrome、firefox、ie6/7/8/9/10
复制代码

clientLeft为左边框宽度,clientTop为上边框宽度。

element.clientLeft/clientTop
兼容:chrome、firefox、ie6/7/8/9/10
复制代码

偏移量,包含元素在屏幕上所用的所有可见空间(包括所有的内边距滚动条和边框大小,不包括外边距)

element.offsetWidth/offsetHeight
兼容:chrome、firefox、ie6/7/8/9/10
复制代码

表示该元素相对于最近的定位祖先元素的距离

element.offsetLeft/offsetTop
兼容:chrome、firefox、ie6/7/8/9/10
差异:
    chrome:offsetLeft=定位祖先左边框宽度+定位祖先元素左内边距宽度+左位移+左外边距宽度
    ie6/7/8/9/10、firefox:offsetLeft=定位祖先元素左内边距宽度+左位移+左外边距宽度
    即:chrome比其他浏览器多计算了定位祖先元素的边框
复制代码

获得水平、垂直滚动条的距离。

element.scrollLeft/scrollTop
兼容:chrome、firefox、ie6/7/8/9/10
复制代码

包含滚动内容的元素大小

element.scrollWidth/scrollHeight
兼容:chrome、firefox、ie8/9/10、ie6/7(半兼容)
有滚动条时:
    chrome、firefox、ie8/9/10:左内边距宽度+内容宽度
    ie6/7:左内边距宽度+内容宽度+右内边距宽度(是由CSS的BUG引起)
无滚动条时:
    左内边距宽度+宽度+右内边距宽度
复制代码

常用总结

屏幕宽度(分辨率):window.screen.width

元素内容宽度:element.clientWidth

元素占位宽度:element.offsetWidth

滚动条偏移距离:

window.pageXOffset/pageYOffset(兼容:ie9/10、chrome、firefox)
window.scrollX/scrollY(兼容:chrome、firefox)
document.body.scrollTop(没有声明<!DOCTYPE html>)
document.documentElement.scrollTop(声明<!DOCTYPE html>)
复制代码

网页可视区域宽/高度:

window.innerWidth/innerHeight
document.body.clientWidth/clientHeight
复制代码

相关文章:

  • Java中泛型ClassT、T与Class?
  • 查询优化器
  • malloc(0)的返回值
  • linux安装mysql5.7.19
  • Python(生成执行文件)
  • Dart4Flutter - 不可变性
  • Android Toolbar的使用 顶部标题栏+后退键
  • 物联网技术周报第 141 期: 使用 Alexa Voice 和 Raspberry Pi 构建图片识别应用
  • MySQL中sync_relay_log选项对I/O thread的影响分析
  • IIS发布网站Microsoft JET Database Engine 错误 '80004005'的解决办法,基于Access数据库...
  • 13、jmeter抓包之浏览器请求
  • HDU 5969 最大的位或【贪心/按位或/思维】
  • Linux内核中的锁——知识点
  • 浅谈Service Mesh体系中的Envoy
  • 3 .5 数据库引擎优化顾问
  • [PHP内核探索]PHP中的哈希表
  • (三)从jvm层面了解线程的启动和停止
  • 《Java编程思想》读书笔记-对象导论
  • 2017前端实习生面试总结
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Python 反序列化安全问题(二)
  • TypeScript迭代器
  • 搞机器学习要哪些技能
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用 @font-face
  • 微信开源mars源码分析1—上层samples分析
  • 想写好前端,先练好内功
  • 译自由幺半群
  • ​2021半年盘点,不想你错过的重磅新书
  • # 达梦数据库知识点
  • #1014 : Trie树
  • $NOIp2018$劝退记
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (7)STL算法之交换赋值
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm高校实验室 毕业设计 800008
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET 的程序集加载上下文
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET导入Excel数据
  • .NET关于 跳过SSL中遇到的问题
  • @Bean有哪些属性
  • [ Linux ] Linux信号概述 信号的产生
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [2010-8-30]
  • [20171101]rman to destination.txt
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [APIO2012] 派遣 dispatching
  • [BROADCASTING]tensor的扩散机制
  • [BZOJ3223]文艺平衡树
  • [C/C++] -- 二叉树
  • [CakePHP] 在Controller中使用Helper
  • [CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]