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
    评论
React设置锚点与普通的HTML页面类似,但需要注意一些细节。下面是在滚动的div设置锚点的步骤: 1. 给需要设置锚点的元素添加一个唯一的ref属性,例如: ```jsx <div ref={el => this.section1 = el}>这是第一部分的内容</div> <div ref={el => this.section2 = el}>这是第二部分的内容</div> <div ref={el => this.section3 = el}>这是第三部分的内容</div> ``` 2. 在页面创建一个指向该元素的锚点链接,例如: ```jsx <a href="#" onClick={() => this.scrollTo(this.section1)}>跳转到第一部分</a> <a href="#" onClick={() => this.scrollTo(this.section2)}>跳转到第二部分</a> <a href="#" onClick={() => this.scrollTo(this.section3)}>跳转到第三部分</a> ``` 注意,在React,我们需要使用onClick事件来监听锚点链接的点击事件,而不是使用普通的<a>标签。 3. 在滚动的div组件,使用ref属性引用该元素,并且监听scroll事件。然后,实现一个scrollTo方法,该方法可以将页面滚动指定元素的位置。 ```jsx class ScrollableDiv extends React.Component { scrollTo = (ref) => { if (ref) { ref.scrollIntoView({ behavior: "smooth" }); } } render() { return ( <div className="scrollable" onScroll={this.handleScroll}> <div ref={el => this.section1 = el}>这是第一部分的内容</div> <div ref={el => this.section2 = el}>这是第二部分的内容</div> <div ref={el => this.section3 = el}>这是第三部分的内容</div> </div> ); } } ``` 在该例子,我们使用scrollIntoView方法将页面滚动指定元素的位置,并且将滚动的过程设置为平滑的。 这样,我们就可以在React实现滚动的div设置锚点功能

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值