熟悉前端页面坐标和偏移量

833 阅读2分钟

前言

我们开发前端项目的时候经常会接触到网站点击事件和手机触摸事件来获取其坐标处理业务,然而前端有多种元素坐标和偏移值有时让我们不好分辨其区别,因为坐标和偏移量都是只读属性,这里我找几个常用的对象来整理一下。

触摸(Touch)和鼠标(MouseEvent)对象

这两个对象是通过对应事件获取的,我们来分析它的一些坐标属性。

clientX和clientY

clientX和clientY返回事件发生时的应用客户端区域的X坐标和Y坐标,不论页面是否有滚动。

pageX和pageY

pageX和pageY返回触点相对于HTML文档左边沿的的X坐标和Y坐标,当存在滚动的偏移时, 这个值包含了滚动的偏移(这里是跟client不同的点)。

screenX和screenY

screenX和screenY返回触点相对于屏幕边沿的的X坐标和Y坐标,不包含页面滚动的偏移量。

offsetX和offsetY

offsetX和offsetY返回事件对象与目标节点的内填充边padding在X轴和Y轴方向上的偏移量

DOM元素

offsetWidth/offsetHeight/offsetLeft/offsetTop

offsetLeft/offsetTop是相对于它的直接父元素的偏移量(包括滚动条)offsetWidth/offsetHeight等于元素内容加上内边距和边框。

offsetWidth = width + padding + border
offsetHeight = height + padding + border

clientWidth/clientHeight

clientWidth/clientHeight是元素内容及其内边距所占空间的大小

clientWidth = width + padding
clientHeight = width + padding

scrollWidth/scrollHeight/scrollLeft/scrollTop滚动相关

scrollHeight/scrollWidth是整个内容区的实际宽高等于内容可滚动区域,scrollLeft/scrollTop是出现了横/纵向滚动条的情况下,滚动条拉动的距离。

window对象

scrollX/scrollY与pageXOffset/pageYOffset

它们都是返回的是整个文档document在水平和竖直方向滚动了的距离,只是因为兼容性多出来的别名。

innerHeight/window.innerWidth

innerHeight/innerWidth记录了视口内文档元素的实际高度和宽度

outerHeight/window.outerWidth

outerHeight/window.outerWidth记录了整个浏览器窗口的实际高度和宽度(包括侧边栏、窗口镶边和调正窗口大小的边框)