js中offset、scroll、client、getBoundingClientRect、event坐标位置及视窗系列

鼠标Event坐标位置

鼠标event对象给我们展示了 client offset page screen系列的X Y坐标 可以用于在不同需求下获取鼠标的相对位置

属性说明
clientX以浏览器左上顶角为原点,定位 x 轴坐标
clientY以浏览器左上顶角为原点,定位y轴坐标
offsetX以当前事件的目标对象content左上角为原点,定位x轴坐标
offsetY以当前事件的目标对象content左上角为原点,定位y轴坐标
pageX以Document 对象(即文本窗口)左上角为原点,定位x轴坐标
pageY以Document 对象(即文本窗口)左上角为原点,定位y轴坐标
screenX计算机屏幕左上角为原点,定位x轴坐标
screenY计算机屏幕左上角为原点,定位y轴坐标
layerX最近的绝对定位的父元素(如果没有,则为Document对象)左上角为原点,定位x轴坐标
layerY最近的绝对定位的父元素(如果没有,则为Document对象)左上角为原点,定位y轴坐标
图例

在这里插入图片描述

兼容

在这里插入图片描述

视窗位置与尺寸

获取视口宽高

下面方法是包括滚动条的宽高,不支持 IE8

window.innerWidth
window.innerHeight

width + padding + border + 滚动条 另外 outerWidth 浏览器兼容差,可获取包括工具栏的宽高

获取窗口的宽高

window.outerWidth
window.outerHeight

获取获取窗口的宽高 (包括工具栏 控制台 地址栏),兼容差

页面滚动位置

返回整个页面的滚动的位置,获取滚动的高度pageYOffset/pageXOffset 与 scrollY/scrollX 返回的值一致,前者是后者的别名,建议使用前者,不支持 IE8

window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft

窗口在显示器的位置

标准浏览器使用的是 screenX/screenY,IE 中使用的是 screenLeft/screenTop

window.screenLeft || window.screenX
window.screenTop || window.screenY

getBoundingClientRect

元素占用的空间尺寸和位置

使用方法 getBoundingClientRect() 返回的值见下图:

在这里插入图片描述

IE 只返回 top right bottom left 四个值,如果需要 width height 则需要计算:

function getBoundingClientRect(elem) {
    var rect = elem.getBoundingClientRect()
    return {
        top: rect.top,
        right: rect.right,
        bottom: rect.bottom,
        left: rect.left,
        width: rect.width || rect.right - rect.left,
        height: rect.height || rect.bottom - rect.top
    }
}

client系列

clientWidth/clientHeight

返回元素不含滚动条的尺寸,不包括边框

document.documentElement.clientWidth || document.body.clientWidth
document.documentElement.clientHeight || document.body.clientHeight
  • 如果是 document.documentElement,那么返回的是不包含滚动条的视口尺寸
  • 如果是 document.body,并且是在混杂模式下,那么返回的是不包含滚动条的视口尺寸

clientLeft/clientTop

返回的是计算后的 CSS 样式的 border-left-width/border-top-width 的值,就是边框的宽度
在这里插入图片描述

offset系列

offsetWidth/offsetHeight

同样可以使用 offsetWidth/offsetHeight 来获取元素包括滚动条和边框的尺寸,这个方法返回元素本身的宽高 + padding + border + 滚动条

offsetLeft/offsetTop

相对于最近的祖先定位元素(CSS position 属性被设置为 relative、absolute 或 fixed 的元素)的左右偏移值

offsetLeft/offsetTop 返回元素 X Y 坐标值

偏移量

  • offsetParent用于获取定位的父级元素
  • offsetParent和parentNode的区别
var box = document.getElementById('box');
console.log(box.offsetParent);
console.log(box.offsetLeft);
console.log(box.offsetTop);
console.log(box.offsetWidth);
console.log(box.offsetHeight);

在这里插入图片描述

封装

获取元素相对于windowView的距离

function getPostion(element) {
  var pos = {
    left: 0,
    top: 0
  }
  while (element.offsetParent) {
    pos.left += element.offsetLeft;
    pos.top += element.offsetTop;
    element = element.offsetParent;
    //如果有边框要计算入父级边框 
    pos.left += element.clientLeft;
    pos.top += element.clientTop;
  }
  return pos;
}

scroll系列

元素内容的宽高和滚动距离

scrollWidth/scrollHeight

这个方法返回元素内容区域的宽高 + padding + 溢出内容尺寸

document.documentElement.scrollWidth || document.body.scrollWidth
document.documentElement.scrollHeight || document.body.scrollHeight

  • 如果元素是 document.documentElement,返回的是视口滚动区域宽度和视口宽度中较大的那个
  • 如果元素是 document.body,并且是在混杂模式下,那么返回的是视口滚动区域宽度和视口宽度中较大的那个

scrollLeft/scrollTop

这个方法返回元素滚动条的位置

  • 如果元素是根元素,那么返回 window.scrollY 的值
  • 如果元素是 body,并且在混杂模式下,那么返回的是 window.scrollY 的值

因此可用于处理页面滚动的距离的兼容

在这里插入图片描述

汇总

offset系列:获取元素的宽,,left,top, offsetParent
offsetWidth:元素的宽,有边框
offsetHeight:元素的高,有边框
offsetLeft:元素距离父元素位置的值
offsetTop:元素距离父元素位置的值

scroll系列:卷曲出去的值
scrollLeft:向左卷曲出去的距离
scrollTop:向上卷曲出去的距离
scrollWidth:元素中内容的实际的宽(如果内容很少或者没有内容, 元素自身的宽),没有边框
scrollHeight:元素中内容的实际的高(如果内容很少或者没有内容,元素自身的高),没有边框

client系列:可视区域
clientWidth:可视区域的宽(没有边框),边框内部的宽度
clientHeight:可视区域的高(没有边框),边框内部的高度
clientLeft:左边边框的宽度
clientTop :上面的边框的宽度

getBoundingClientRect:不管元素的当前层级,定位层级 ,top left bottom right x y 都是距离浏览器的左上角
bottom: 底边距离浏览器顶部
height: 元素总高度(height+padding+border)
left: 左边距离浏览器左边
right: 右边距离浏览器左边 right - left = width
top: 顶部距离浏览器顶部
width:  元素总宽度(width+padding+border)
x: 元素左上角顶点距离浏览器左上角顶点的坐标X
y: 元素左上角顶点距离浏览器左上角顶点的坐标Y
      
event鼠标事件的坐标属性,他们都是鼠标指针尖端在触发事件的时候 的坐标位置
clientX clientY:触发事件时鼠标指针距离window窗口左上角的位置
                 坐标原点为 window窗口的左上角 
pageX pageY:触发事件时鼠标指针距离docuemnt文档左上角的位置
             坐标原点为 document文档的左上角 
offsetX offsetY:元素content内容区域的左上角为原点
                以当前事件的目标对象边框内沿左上角为原点,定位x轴坐标
screenX screenY:触发事件时鼠标指针距离 屏幕视窗(显示器)左上角的位置
x y:设置或获取鼠标指针位置相对于父文档的 x y 像素坐标
layerX layerY:触发事件的DOM对象的DOM树上的父级(祖级)中最近的拥有定位属性的元素的左上角为原点 (鸡肋)

视窗系列
window.innerWidth :浏览器可视区域窗口的width + padding + border + 滚动条
window.innerHeight :浏览器可视区域窗口的height + padding + border + 滚动条
outerWidth : 浏览器整体宽度 (包括工具栏 控制台 地址栏)
outerHeight : 浏览器整体高度 (包括工具栏 控制台 地址栏)
window.pageYOffset :页面滚动位置,就是获取滚动的高度
document.documentElement.scrollTop || document.body.scrollTop :获取滚动的高度
window.screenLeft || window.screenX :窗口在显示器的位置,距离显示器左边的距离
window.screenTop || window.screenY :窗口在显示器的位置,距离显示器上面的距离
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值