【React】在不定高的情况下,实现锚点的跳转

锚点跳转的JSX代码

        <div className={'anchor-box'}>
            <div className={'anchor-link fixedTop'}>

              <Anchor
                onChange={() => {
                 
                }}
                getContainer={()=>document.querySelector('.layout-box') as HTMLElement}
                affix={true}
                getCurrentAnchor={()=>'anchor-deploy'}
                onClick={clickAnchor}
              >
              
                <Anchor.Link href="anchor-1" title="锚点1" className={'mb-16'}/>
                <Anchor.Link href="anchor-2" title="锚点2" className={'mb-16'}/>
                <Anchor.Link href="anchor-3" title="锚点3" />

              </Anchor>
            </div>

注:Anchor.Link设置的href和在页面对应DOM元素设置对应的id,是一一对应的。(这里省略了DOM元素对应的id的HTML代码,只要是在.layout-box内的DOM元素即可)

css

//...
.fixedTop{
  position: fixed;
}
// 高度不限制,继承父容器的100%
.anchor-box{
	 width: 150px;
    margin: 16px 0 78px 0;
    padding: 16px 24px;
    overflow: auto;
    background: #fff;
}
const clickAnchor = (
    e: any,
    link: {
      title: React.ReactNode
      href: string
    }
  ) => {
    e.preventDefault()
    let anchorElement = document.getElementById(link.href);
    // 如果对应id的锚点存在,就跳转到锚点
    if(anchorElement) { 
    anchorElement.scrollIntoView({block: 'start', behavior: 'smooth'}); 
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<p><span xss=removed>Ant Design 是阿里开源的一套企业级的 UI 设计语言和 React 实现,使用 TypeScript 构建,提供完整的类型定义文件,自带提炼自企业级中后台产品的交互语言和视觉风格、开箱即用的质量 React 组件与全链路开发和设计工具体系。</span></p><p> </p><p>特性:</p><p>提炼自企业级中后台产品的交互语言和视觉风格。</p><p>开箱即用的质量 React 组件。</p><p>使用 TypeScript 开发,提供完整的类型定义文件。</p><p>全链路开发和设计工具体系。</p><p>数十个国际化语言支持。</p><p>深入每个细节的主题定制能力。</p><p> </p><p>兼容环境:</p><p>现代浏览器和 IE11(需要 polyfills)。</p><p>支持服务端渲染。</p><p>Electron</p><p> </p><p>Ant Design 更新日志:</p><p>v4.16.0</p><p>重构 Menu,支持键盘操作以及无障碍体验优化。</p><p>重新设计 Table 筛选和排序按钮的位置,使其归属列更明确。</p><p>Table</p><p>  Table.Summary 支持 sticky 模式。</p><p>  修复有固定列的 Table 内嵌 Table 的额外边距丢失的问题。</p><p>  Table 新增 expandable.fixed 属性用于设置扩展图标固定。</p><p>Upload</p><p>  Upload 组件 itemRender 添加 actions 调用参数。</p><p>  Upload 从拖动事件中删除 stopPropagation,并添加onDrop 回调。</p><p>Typography</p><p>  Typography 增加斜体字支持。</p><p>  修复 Typography 配置 ellipsis={{ suffix: 'xxx' }} 时换行闪动问题。</p><p>Collapse</p><p>  修复 Collapse 不指定 header 时箭头错位的问题。</p><p>  修复 Collapse 隐藏时设置 activeKey 时内容会消失的问题。</p><p>修复 Menu.SubMenu 的 icon 设置为第三方 icon 库时的样式问题。</p><p>修复 Descriptions 单独引入样式丢失的问题。</p><p>Radio.Group 支持 data-* 和 aria-* 属性。</p><p>Statistic.CountDown 组件增加 onChange 事件。</p><p>PageHeader 的 breadcrumb 中允许设置为组件。</p><p>ConfigProvider 支持动态设置 prefixCls。</p><p>修复 Anchor 指定 getCurrentAnchor 后无法触发 onChange 的问题。</p><p>修复 Notification useNotification 生成的通知框 className 作用范围不一致的问题。</p><p>修复 Tabs tabBarGutter 属性失效的问题。#30545</p><p>改写 Space 使用 flexGap 以代替 margin 样式以处理某些边界情况下的布局问题。</p><p>修复 Form 校验错误状态下 Input.Group 和 Cascader 边框颜色错误。</p><p>国际化</p><p>  补充罗马尼亚语国际化。</p><p>  补充荷兰语(荷兰 netherlands)及荷兰语(比利时 belgium)国际化。</p><p>TypeScript</p><p>  Space TypeScript 定义支持 HTMLAttribute 属性。</p>
好的,react-marknavbar和Anchor都是React组件,可以一起使用来实现页面内的导航栏和锚点跳转。 首先,您需要安装这两个组件,可以使用npm或yarn进行安装。例如,使用npm安装: ``` npm install react-marknavbar anchor-js ``` 安装完成后,您可以在React项目中引入这两个组件: ```javascript import React from 'react'; import { MarkNav, Anchor } from 'react-marknavbar'; import 'anchor-js'; const App = () => { return ( <div> <MarkNav> <Anchor href="#section1">Section 1</Anchor> <Anchor href="#section2">Section 2</Anchor> <Anchor href="#section3">Section 3</Anchor> </MarkNav> <div id="section1"> <h2>Section 1</h2> <p>Content for section 1 goes here.</p> </div> <div id="section2"> <h2>Section 2</h2> <p>Content for section 2 goes here.</p> </div> <div id="section3"> <h2>Section 3</h2> <<p>Content for section 3 goes here.</p> </div> </div> ); }; export default App; ``` 在上面的代码中,我们首先引入了MarkNav和Anchor组件,然后使用MarkNav组件包裹了几个Anchor组件,这些Anchor组件分别对应页面中的几个锚点。在每个锚点的href属性中,我们使用了类似于#section1的语法来指定跳转的目标位置。最后,我们在页面中添加了几个div元素,这些元素分别对应了不同的锚点位置。 当用户在页面上点击导航栏中的链接时,页面会自动滚动到对应的锚点位置。这一过程是通过Anchor组件中的anchor-js库来实现的。如果您需要更多关于这些组件的信息,可以参考官方文档或者相关的开发社区。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值