React中点击滚动功能实现

React中点击滚动功能实现

  • 问题背景

    • 当我们在React中需要实现点击某处实现滚动到页面上某位置A的功能。
  • 解决方法

    • 使用ref + getBoundingClientRect() + scrollTo

      • 使用ref获取A位置处的DOM元素实例。
      • 使用getBoundingClientRect()获取滚动到这个DOM实例的距离。(rect.bottom是DOM实例A距离viewport左上角的Y轴上的距离)。
      • 使用scrollTo({top: dis, behavior: “smooth”})完成滚动。
    • 使用a标签锚点

      const Sub: React.FC = () => {
        return (
          <>
          	<a href="#aaa"></a>
          </>
        )
      }
      

      当点击a标签的时候,页面会instant滚动到id为aaa的元素处。并且URL后面会加上锚点,www.example.com/extension#aaa

      const someComponent: React.FC = () => {
        return (
          <>
          	<div id="aaa"></div>
          </>
        )
      }
      

      即使a标签和具有对应id的DOM元素不在一个组件中也没有问题,因为不管在哪个组件中,最终这个页面中都只有一个具有对应id的DOM元素。

    • 设置平滑滚动

      • 使用CSS属性scroll-behavior

        :global{
          html{
            scroll-behavior: smooth;
          }
        }
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值