React页面点击悬浮按钮滑动定位到页面顶部

前言

一、添加悬浮按钮

二、设置滑动的目标

三、给悬浮按钮添加点击事件


前言

Web页面上,当某个页面内容特别多,下拉到底部的时候,想再返回页面顶部就得鼠标滚轮滑好多下,或者没有鼠标的话操作就更麻烦了。

这个时候页面右下角往往会放一个悬浮按钮,点击按钮立即滑动到页面顶部,就方便了很多。本文就是此功能的一个简单的实现。


提示:以下是本篇文章正文内容,下面案例可供参考

一、添加悬浮按钮

在布局文件里加上这个按钮:

        <img 
          alt="top" 
          src={IcoTop} 
          style={{
            position: "fixed",
            cursor: "pointer",
            right: "60px",
            bottom: "60px",
            zIndex: 99
          }}
          onClick={()=>scrollToAnchor("page-top", true)}
        />

上面的代码里,IcoTop是自定义的一个图标,你可以替换为自己需要的图片地址。

position: fixed 设置按钮的定位方式为基于浏览器窗口定位。这样不管页面滑动到什么位置,这个按钮始终显示在右下角,距离右边和底部60px。zIndex设置了优先级,设置大一点,保证不会被页面其他内容遮挡住。

二、设置滑动的目标

在页面最顶部的布局里,给某个控件设置一个id,或者添加一个带id的div。代码如下:

<div id="page-top"/>

必须要设置id,因为我们需要通过id来找到这个div,从而确定页面会滑动到这个div所在的位置。


三、给悬浮按钮添加点击事件

第一步其实我们已经添加过点击事件了: 

onClick={()=>scrollToAnchor("page-top", true)}

下面是点击事件的代码示例:

/**
* anchorName: 滑动的目标位置的id
* smooth: 滑动时是否有过渡动画效果
*/
const scrollToAnchor = (anchorName:string, smooth: boolean) => {
  if (anchorName) {
    const anchorElement = document.getElementById(anchorName);
    if (anchorElement) {
      anchorElement.scrollIntoView({block: 'start', behavior: smooth? 'smooth': 'auto'});
    }
  }
}

这样功能就完成了。如果想跳转到页面其他指定位置,也可以按照这样的实现,只要把顶部的锚点div移动到指定位置即可。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
React悬浮窗口通常使用React Portal实现。React Portal允许我们将子元素呈现到DOM节点之外的另一个位置,通常是<body>元素的子元素。这使我们能够在应用程序的任何位置呈现悬浮窗口。 以下是一个简单的React悬浮窗口示例: 1. 创建一个Portal组件: ```jsx import { createPortal } from 'react-dom'; const modalRoot = document.getElementById('modal-root'); class Portal extends React.Component { constructor(props) { super(props); this.el = document.createElement('div'); } componentDidMount() { modalRoot.appendChild(this.el); } componentWillUnmount() { modalRoot.removeChild(this.el); } render() { return createPortal( this.props.children, this.el, ); } } ``` 2. 在App组件中使用Portal组件: ```jsx class App extends React.Component { constructor(props) { super(props); this.state = { showModal: false }; this.toggleModal = this.toggleModal.bind(this); } toggleModal() { this.setState({ showModal: !this.state.showModal }); } render() { return ( <div> <button onClick={this.toggleModal}>Toggle Modal</button> {this.state.showModal && ( <Portal> <div className="modal"> <div className="modal-content"> <h1>Modal Title</h1> <p>Modal content goes here.</p> <button onClick={this.toggleModal}>Close Modal</button> </div> </div> </Portal> )} </div> ); } } ``` 在上面的示例中,我们将Portal组件用作容器,将模态框的内容呈现到<body>元素中。这使得模态框可以浮动在应用程序的其他元素上方,并且可以从任何地方访问它。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值