打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Ref实现导航滚动定位

摘要

  在开发项目中时常有点击跳转滚动到锚点的需求,最简单的锚点定位就是给一个a标签,a标签的href = '#锚点’,然后给需要跳转的锚点一个id = '锚点’。参考最简单的锚点跳转实现方式,在React中使用useRef来实现跳转锚点的功能。

 

功能具体步骤

1、创建空的Ref  

import React, { useRef } from 'react';

const Layout = () => {
    const pageTopRef = useRef(null);
    const sectionEventInfoRef = useRef(null);

  return (
      <div>滚动内容</div>
  )  
}

2、跳转锚点函数

  Element.scrollIntoView() 方法让当前的元素滚动到浏览器窗口的可视区域内。我们可以利用该方法搭配Ref实现跳转锚点的功能,behavior属性可以定义动画过渡效果,跳转锚点时滚动效果平滑些。具体代码代码如下:

  // 点击导航按钮,滚动到页面中相对应的区域
  const handleClickNavItem = ref => {
    setIsWork(false);
    if (ref.current) {
      ref.current.scrollIntoView({ behavior: "smooth" });
    }
  }

3、锚点

   bind()绑定ref,锚点处在绑定对应跳转ref,简化式代码如下所示:

 

import React, { useRef } from 'react';
import '../style.scss';

const Layout = () => {
  const pageTopRef = useRef(null);
  const sectionEventInfoRef = useRef(null);

  // 点击导航按钮,滚动到页面中相对应的区域
  const handleClickNavItem = ref => {
    if (ref.current) {
      ref.current.scrollIntoView({ behavior: "smooth" });
    }
  }

  return (
    <div className="activity-area">
      <div className="actAr-wrapper">
        <div className="actAr-tabs">
          <button onClick={handleClickNavItem.bind(null, pageTopRef)}>首页</button>
          <button onClick={handleClickNavItem.bind(null, sectionEventInfoRef)}>活动详情</button>
          <button onClick={openEWorks}>精选作品</button>
        </div>
        <div className="actAr-content">
          <!-- 锚点一 -->
          <div ref={pageTopRef}>
            回到首页的锚点
          </div>
          <!-- 锚点二 -->
          <div ref={sectionEventInfoRef}>
            活动详情的锚点
          </div>
        </div>
      </>
    </div>
  )
}

export default Layout;

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
hooks 与 animejs
React Ref 其实是这样的
React hooks组件通信
react hooks系列之useRef
Electron+React 快速搭建一个桌面应用
​如何使用 GraphQL 构建 TypeScript React 应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服