【问题标题】:ReactJS: How to overlay a component on top of another component's element?ReactJS:如何将一个组件覆盖在另一个组件的元素之上?
【发布时间】:2019-09-08 19:29:16
【问题描述】:

我刚刚开始反应。 我有一个组件,它有一个输入字段和一个按钮。 还有另一个组件返回 JSX(一个闪烁的点)。我正在导入主组件中的闪烁点组件,并希望在输入字段为空时将闪烁点覆盖在输入字段的顶部。

我怎样才能做到这一点?请帮助我。

此代码可在以下位置找到: https://stackblitz.com/edit/react-xmssdv

function App() {
  const [name, setName] = React.useState("");
  const inputChangeHandler = event => {
    setName(event.target.value);
    console.log(name);
  }

  return (
    <div>
        <input type="text" value={name} onChange={inputChangeHandler} />
      <div className="button">
        <button type="button">Click Me!</button>
      </div>

      <Dot />
    </div>
  );
}

【问题讨论】:

  • 参考z-index,你需要一个控制点显示的状态
  • 如果您有覆盖输入的内容,您打算如何访问输入以键入内容以删除覆盖它的内容?
  • @DennisVash 但是我将如何获得显示闪烁点的元素的位置?你能看一下代码吗?当您在输入字段中输入内容时,点会消失,但我怎样才能将它放在输入字段的顶部?
  • @Andy 要求是,我想在输入字段上向用户显示一个闪烁的点,以便在此处输入文本。用户输入内容后,闪烁的点会转到按钮并开始在其上方闪烁
  • 解决问题的方法是你真的需要回去重新学习 CSS。这个问题只是 CSS 问题,可以很容易地用 CSS 解决。我不会写答案,因为您明确表示您不想看到任何代码。

标签: javascript css reactjs


【解决方案1】:

通过以下两个更改可以轻松实现:
步骤 1. 在index.js 中将 Dot 组件移到顶部:

function App() {
  const [name, setName] = React.useState("");
  const [showDot, setShowDot] = React.useState(true);

  React.useEffect(() => {
    name ? setShowDot(false) : setShowDot(true);
  }, [name])

  return (
    <div>
        { showDot ? <Dot /> : null }
        <input type="text" value={name} onChange={() => setName(event.target.value)} />
      <div className="button">
        <button type="button">Click Me!</button>
         { name ? <Dot /> : null }
      </div>


    </div>
  );
}

步骤 2. 在Dot/dot.css 中引入 dot 作为绝对定位:

.Blink {
  position: absolute;
  width: 30px;
  height: 30px;
  background-color: blue;
  border-radius: 50%;
  animation: blinker 1s cubic-bezier(0.5, 0, 1, 1) infinite alternate;
}

【讨论】:

  • 非常感谢您,但问题是我必须动态更改闪烁点的位置。它最初可以找到,但是当用户在输入字段中输入内容时,闪烁的点应该转到“单击我”按钮。我怎样才能做到这一点?
  • 好的。我已经对答案进行了更改以满足您的要求。尝试一下。希望对您有所帮助。
  • 还有一件事。目前,点出现在输入字段的开头。我们如何将点放在输入字段的中心?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 2011-03-19
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2020-09-04
  • 2022-06-10
相关资源
最近更新 更多