javascript - React 15 - 查找元素的 offsetTop 属性

标签 javascript html reactjs

我正在开发一个 React 应用程序,它有两个可点击的元素。为了简单起见,我们假设它们是两个按钮,其中一个按钮的位置高于另一个按钮。

实际上,可能有 30 个这样的按钮,全部位于一个也可以滚动的垂直列表中。

import { Button } from 'react-bootstrap';

<Button ref={(ref) => this.button1 = ref onClick={() => getHeight(this.button1)} }>Top</Button>
<Button ref={(ref) => this.button2 = ref onClick={() => getHeight(this.button2)}}>Bottom</Button>

我需要根据单击的两个按钮来计算一个按钮和另一个按钮之间的相对高度,并使用它动态地为 div 提供高度。

getHeight 函数如下所示:

getHeight = (button) => {
    console.log(button.current.offsetTop);
    // In reality, it would store this y-value somewhere for this button
}

运行此程序时,每当我单击按钮时都会返回undefined

在 React 中,如何访问元素引用的 offsetTop 属性?我关心的是绝对偏移,而不仅仅是视口(viewport)偏移。这意味着当我向下滚动到屏幕外的按钮时,我会得到相对于页面顶部的真实偏移量,而不仅仅是视觉上的偏移量。

一些值得注意的事项:

  • 我使用的是 React 15,而不是 16,并且无权访问 React.createRef 函数。

  • 因为这是一个 React 应用程序,如果人们可以建议不涉及 JQuery 的解决方案,那就最好了。

最佳答案

为此,您并不完全需要引用。没有这个也可以完成。您可以创建一个按钮并使用以下代码将 onClick 放在其上,以计算按钮的绝对 Y 位置。

onClick={(e) => {this.getTop(e)}}

getTop = (e) => {
  const elem = e.target;
  const rect = elem.getBoundingClientRect();
  const scrollTop = document.documentElement.scrollTop;
  const absoluteY = scrollTop + rect.top;
}

我做了一个小 fiddle 示例来向您解释这个概念的工作原理。 https://jsfiddle.net/7520ebgf/23/

关于javascript - React 15 - 查找元素的 offsetTop 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56859984/

相关文章:

javascript - javascript中静态方法的名称不能重复?

javascript - 创建多个轮播时轮播 slider 滑动不正确

css - 仅对单个网页为 body 标签提供自定义填充

javascript - 如何制作小游戏的计数器?

css - HTML 页面不会验证

javascript - 在 React 风格的组件中使用 props

javascript - 为什么即使文件存在于服务器上,jQuery ajax 也会返回 404 Not found 错误?

java - 使用浏览器访问文件系统文件

reactjs - 从 string=>type 的映射推断 react Prop 类型时修复 typescript 警告

javascript - redux 不更新 reducer 后的 View