元素、鼠标位置获取&设置

3,902 阅读2分钟

目录:

获取位置

元素位置

Element.getBoundingClientRect()
获取元素相对于窗口的大小、位置(只读):
top / bottom: 上下边到窗口(浏览器界面)顶部(可能负数)
left / right : 左右边到窗口左边(可能负数)
width / height : 元素的宽高
x / y : 与 top / left 相同,不过兼容性差
注:width / height / x / y 兼容性差,width 可以用 right - left 代替;x / y 干脆不用

滚动位置

window.scrollYwindow.pageYOffset(可设置) 兼容性更好;窗口相对于文档的Y轴滚动距离
window.scrollXwindow.pageXOffset(可设置) 兼容性更好;窗口相对于文档的X轴滚动距离

Element.scrollTop(可设置) 元素距离文档顶部滚动距离

鼠标位置

MouseEvent 属性:
clientX / clientY(只读) : 鼠标相对于窗口(浏览器界面)
x / y : 上面两个的别名
offsetX / offsetY(只读) : 鼠标相对于被点击的元素(不一定是绑定事件的元素)
screenX / screenY(只读) : 鼠标相对于屏幕
pageX : pageY(只读) 鼠标相对于文档

touch位置

touch事件的 touch 数据主要存于下面几个:

1.touches 代表属性是由多个触碰点(touch)组成的数列(代表着多少个触碰点),不论 touchstart 事件从哪个elment上触发

2.targetTouches : 只记录了目标element上的触点

3.changedTouches(touchend 事件必用) : 记录了变化的点,分别如下:
touchstart: 此次事件中新增加的触点。
touchend: 列出离开触摸平面的触点 (注意,如果我们想要获取手指离开屏幕的位置,需要用这个属性)
touchmove: 和上一次事件相比较,发生了变化的触点。

(只读)每个 touch 存有 screenX / screenY / clientX / clientY / pageX / pageY 属性,数据如上

jQuery

$dom.offset()属性:
top / left : 第一个元素相对于文档(document)的 X / Y 坐标
.offset() 还可以用来设置位置,参数为一个有 top 和 left 属性的对象{top: 1, left: 100},也可以是一个返回这么一个对象的函数。
$dom.position()属性(只读):
top / left : 当前元素的 content(不包括 padding / border / margin) 相对于父级元素的 margin外层 的 X / Y 坐标;

$dom.position()属性:获取第一个元素的的滚动位置,或者为所有匹配元素设置滚动位置
注意 $dom 为内部可滚动的元素(比如 window ),否则 position 属性得到的都是 0;

注意,使用 jQuery 的时候,事件与 DOM api 中的没区别

设置位置

1.jQuery 的 offset() / scrollTop()
2.设置 style (比如 element.style.top)
3.window.pageYOffset / window.pageXOffset / Element.scrollTop 都可以设置

可能还有不全面的地方,希望你帮我修改补充,谢谢!