boundingClientRect和rootBounds的x,y,width,height,top,bottom都为0

使用IntersectionObserver实现分页加载数据时打印boundingClientRect和rootBounds的x,y,width,height,top,bottom都为0

请添加图片描述

如图点击已支付tab后,在我下拉想要加载下一页数据时,一直加载不出来,然后打印了entries后发现上面的问题

原因

  • 查看了两个tab下的entries后,发现entries—>target并没有获取到已支付tab下lists的#mk-loading元素,boundingClientRect和rootBounds的x,y,width,height,top,bottom都为0,即没有根元素和目标元素矩形区域。
  • 因为antd-mobile的tabs模块点击后未支付的tabs-content样式变为display:none,而已支付的 tabs-content的样式为display:block,但此时两个tabs-content下都有#mk-loading元素,entries—>target获取到的是第一个隐藏的未支付的#mk-loading元素
    请添加图片描述
    (图上框为未支付tab下的entries,图下框为已支付tab下的entries)

解决:当点击对应tab后隐藏之前tabs-content下的#mk-loading元素,不在dom中显示

  • 父组件
const [isShow, setIsShow] = useState('no-pay')
...
let tabs = [
        {
            key: '0',
            title: '未支付',
            cont: <Lists isShow={isShow} .../>
        },
        {
            key: '1',
            title: '已支付',
            cont: <Lists isShow={isShow} ... />
        }
    ]
...
 const handleChange = (key) => {
        ...
        setShowLoading(true);
        if (isShow === 'no-pay') {
            setIsShow('pay')
        } else {
            setIsShow('no-pay')
        }
 }
    ...
     <Tabs onChange={handleChange}>
          {tabs.map(item => (
             <Tabs.Tab title={item.title} key={item.key}>
                 {item.cont}
             </Tabs.Tab>
        ))}
    </Tabs>
  • 子组件
    如果点击了已支付tab则隐藏掉未支付的loading,只显示已支付的loading
...
{
     props?.isShow === 'pay' && <ShowLoading showLoading={props.showLoading} /> />
}
{
     props?.isShow === 'no-pay' && <ShowLoading showLoading={props.showLoading} /> />
}
...

请添加图片描述

更多文章可访问博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值