判断元素是否在可视范围内

更新日期: 2021-11-24阅读量: 34标签: 屏幕

DOMRect 对象包含了一组用于描述边框的只读属性left、top、right、bottom、x、y以及width、height,单位为像素。

属性描述
bottomY 轴,相对于视口原点(viewport origin)矩形盒子的底部。只读
height矩形盒子的高度(等同于 bottom 减 top)。只读
leftX 轴,相对于视口原点(viewport origin)矩形盒子的左侧。只读
rightX 轴,相对于视口原点(viewport origin)矩形盒子的右侧。只读
topY 轴,相对于视口原点(viewport origin)矩形盒子的顶部。只读
width矩形盒子的宽度(等同于 right 减 left)。只读
xX 轴,相对于视口原点(viewport origin)矩形盒子的左侧。只读
yY 轴,相对于视口原点(viewport origin)矩形盒子的顶部。只读

除了 width 和 height 外的属性都是相对于视口的左上角位置而言的。

该对象的width和 height 值包含元素的 border 和 padding。

getBoundingClientRect会受到transform的影响。比如你的元素设置了transform:scale(2), 那么getBoundingClientRect返回的width会是元素实际宽度的2倍,top等位置信息也会因为元素尺寸变化而发生变化.

元素的offsetWidth包含 border、 padding、content的宽度。
元素的clientWidth仅包含元素的 padding、content的宽度。


代码实现:

partiallyVisible为是否为完全可见

function elementIsVisibleInViewport(el, partiallyVisible = false) {
const {top, left, bottom, right} = el.getBoundingClientRect()
return partiallyVisible ?
((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) &&
((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth)) :
top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth
}


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: https://www.fly63.com/article/detial/10856

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!