【问题标题】:Need to click on absolute element and trigger 2 click events: 1 for the absolute element and other for the element behind it需要点击绝对元素并触发2个点击事件:1个为绝对元素,另一个为它后面的元素
【发布时间】:2020-04-09 01:11:00
【问题描述】:

我可以为这两个元素触发click 事件吗?

  • position: relative容器
    • 元素 1: 常规 div
    • 元素 2: position: absolute div

IRL 元素 2 是一个透明背景,用于监听标题顶部的点击以隐藏导航抽屉。但是如果用户点击 Header 标志,我想隐藏导航抽屉,但我也想导航到主页。

有可能吗?有什么办法可以解决这个问题?

function App() {
  
  function handleClick1() {
    console.log('From handleClick 1 behind div...');
  }
  
  function handleClick2() {
    console.log('From handleClick 2 absolute div...');
  }
  
  return(
    <div className="container">
      <div className="normal" onClick={handleClick1}>
        Only the absolute DIV click is fired.
      </div>
      <div className="absoluteDiv" onClick={handleClick2}>
      </div>
    </div>
  );
}

ReactDOM.render(<App/>, document.getElementById('root'));
div.container {
  position: relative;
  width: 150px;
  height: 150px;
}

div.normal {
  width: 100%;
  height: 100%;
  cursor: pointer;
}

div.absoluteDiv {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(55,55,55,0.3);
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="root"/>

【问题讨论】:

  • 我不明白你到底想要什么?您希望在单击时同时单击两个元素?
  • 你想错了。您的事件逻辑应该发生得更高。因此,假设您有两个元素的父容器,您希望事件“触发”,但这实际上不是您想要的 - 在反应数据更改视图中,所以假设您使用点击事件“eventFired:true”进行更改,如果它是比更改要折叠的元素的 CSS 更真实。并使用生命周期方法知道何时重定向到其他路由。
  • 你们是对的。我确实最终在更高的层次上处理它。但是我仍然很好奇这个“技巧”是否可能。但我想不是。

标签: javascript html css reactjs


【解决方案1】:

我不确定这是你在尝试的,还是类似的。

function App() {
  
  const handleClick1 = ()  => {
    console.log('From handleClick 1 behind div...');
  }
  
  const handleClick2 = () => {
    handleClick1();
    console.log('From handleClick 2 absolute div...');
  }
  
  return(
    <div className="container">
      <div className="normal" onClick={handleClick1}>
        Only the absolute DIV click is fired.
      </div>
      <div className="absoluteDiv" onClick={handleClick2}>
      </div>
    </div>
  );
}

ReactDOM.render(<App/>, document.getElementById('root'));
div.container {
  position: relative;
  width: 150px;
  height: 150px;
}

div.normal {
  width: 100%;
  height: 100%;
  cursor: pointer;
}

div.absoluteDiv {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(55,55,55,0.3);
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="root"/>

【讨论】:

  • 不完全是。我不确定用户可以点击哪里。如果他们单击徽标,我想导航,但如果他们单击标题上的某个空白区域,那么我只想关闭抽屉。不过谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2019-07-05
  • 1970-01-01
相关资源
最近更新 更多