js 各种位置获取全解(包括元素属性、鼠标位置、滚动位置)

元素位置属性

如果不了解盒子模型建议先阅读一下:css 盒子模型详解

属性解释
offsetWidth、offsetHeight可视宽高,内容区+padding+border+滚动轴宽度,平时一般没有滚动轴,所以基本都是内容区+padding+border
offsetLeft、offsetTop左边与上边与设置了定位的父级的距离
clientWidth、clientHeight内容区+padding,不包括border
clientLeft、clientTopclient内容区域边到offset可视区域边的距离,因为两个差别就是border,可以简单理解为左、上边框border宽度
scrollTop、scrollLeft水平垂直方向滚动距离
scrollWidth、scrollHeight滚动的内容宽度与高度

获取元素四周与浏览器屏幕视窗位置方法

要想获得与屏幕的关系,一般是在有滚动的情况下可以用于计算,用到的是元素的getBoundingClientRect方法。

该方法返回的对象上存在如下属性:

属性解释
top元素最上面,距离屏幕顶部距离
bottom元素最下面,距离屏幕顶部距离
left元素最左边,距离屏幕左部距离
right元素最右边,距离屏幕左部距离
x元素左上角的距离屏幕左部距离,一般与left一致
y元素左上角的距离屏幕顶部距离,一般与top一致
width、height可视宽高,一般与元素位置属性offsetWidth、offsetHeight一致

浏览器屏幕可视宽高

小知识:document.documentElement就可以看作html标签元素也就是主根元素、document.body就是body标签元素也就是文档元素。

属性解释
document.documentElement.clientWidth、document.documentElement.clientHeight屏幕可视宽高,不包括滚动轴
window.innerWidth, window.innerHeight屏幕可视宽高,注意,这会包括浏览器横向与纵向的滚动轴,只有不存在滚动轴或滚动轴无宽度才能达到获取可是宽高的目的

鼠标位置

属性解释
e.x、e.y鼠标距离可视屏幕区域左侧与上方的距离
    document.getElementById('box').onmousemove = (e) => {
        console.log(e.x,e.y)
    }

鼠标在某元素上的位置

获取计算解释
e.x - box.getBoundingClientRect().x鼠标距离元素左侧距离,也就是在元素上的x值。
e.x - box.getBoundingClientRect().left同上
e.y - box.getBoundingClientRect().y鼠标距离元素上侧距离,也就是在元素上的y值。
e.x - box.getBoundingClientRect().top同上
    const box = document.getElementById('box')
    box.onmousemove = (e) => {
        console.log(
            e.x - box.getBoundingClientRect().x,
            e.y - box.getBoundingClientRect().y
        )
    }

滚动位置

小知识:如果不是自己设定的div滚动窗口,就用浏览器的滚动窗口,有很多种监听事件。window.onscroll、document.onscroll、document.body.onscroll、document.documentElement.onscroll这些都是一个效果,但是兼容性不一。最好统一就使用window.onscroll,它的兼容性最好,基本支持所有浏览器。如果是自己设定的div滚动框也可以,同样没有兼容问题。

浏览器滚动轴横纵向已滚动距离(受滚动影响被隐藏的宽高)兼容
window.scrollX、window.scrollY兼容较好推荐
window.pageXOffset、window.pageYOffset兼容较好推荐
document.documentElement.scrollTop、document.documentElement.scrollLeft兼容较差不推荐
document.body.scrollTop、document.body.scrollLeft兼容较差不推荐
自定义div滚动横纵向已滚动距离(受滚动影响被隐藏的宽高)兼容
document.getElementById(‘box’).scrollLeft、document.getElementById(‘box’).scrollTop无兼容问题
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下月亮有何贵干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值