js - js中关于getBoundingClientRect()方法的使用

介绍一下getBoundingClientRect()方法的一些属性,以及具体的使用场景和一些需要注意的问题;

1,介绍

此方法返回元素的大小及其相对于视口的位置;返回的是一个对象: 包括 left、top、right、bottom、x、y、width 和 height这几个属性;

属性描述
Element.getBoundingClientRect().top元素上边距离页面上边的距离
Element.getBoundingClientRect().left元素左边距离页面左边的距离
Element.getBoundingClientRect().right元素右边距离页面左边的距离
Element.getBoundingClientRect().bottom元素下边距离页面上边的距离
Element.getBoundingClientRect().x元素左边距离页面左边的距离
Element.getBoundingClientRect().y元素右边距离页面左边的距离
Element.getBoundingClientRect().width 元素自身的宽度
Element.getBoundingClientRect().height 元素自身的高度

注意:
1,对象中的 width 和 height 属性是包含了内边距(padding )和边框( border )的宽度的,而不仅仅是内容部分的宽度和高度。
2,当页面过高且滚动的时候,元素不在视口的可视区域时 是会出现负值的;
3,空边框盒(没有内容的边框)会被忽略。那么这个矩形给该元素返回的 width、height 值为 0,left、top 值为第一个 CSS 盒子(按内容顺序)的 top-left 值。

下面是演示图:
在这里插入图片描述

2,使用场景:

由图可知这是一个吸顶的菜单栏,当内容向上滚动时,总况趋势滚动到页面的上半部分时,吸顶菜单相对应的项要高亮起来,当机构趋势模块滚动到页面上半部分时,吸顶菜单的机构趋势也要高亮起来;

思路:
1,第一首先要监听滚动条,每一滑动都要判断距离页面上面的距离;
2,判断总况趋势顶部距离上边视口的高度如果小于200 且总况趋势底部距离上边的距离大于0,就高亮总况趋势;

得到

主要代码如下:
tabItem是通过this.$ref获取的每一项内容模块(页面紫色和淡黄色的部分);

实际情况还是要根据业务要求来实现,这只是记录一种思路;

  // 记录选中的当前项
        for (let i = 0; i < tabItems.length; i++) {
          let ClientRect = tabItems[i].getBoundingClientRect().top
          // 此行是为了向上滚动出现负数的情况 处理上半部分
          let handleTop = ClientRect <= 0 ? ClientRect * -1 : ClientRect;
          // 获取元素容器下边 距离页面上边的距离
          let handleBottom = tabItems[i].getBoundingClientRect().bottom;
          // console.log("下面距离上面的高度:",handleBottom);
          // handleTop <= 200是为了控制上半部分  handleBottom >0是为了控制向上滑动的过程中下面也需要判断
          if (handleTop <= 200 && handleBottom > 0 ) {
            this.act_index = i;
            break; //退出所有的循环
          }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值