【发布时间】:2019-07-26 21:23:24
【问题描述】:
我正在开发一个网站,目前我有一个用于注销的 svg 图标。 单击图标时,会弹出一个带有注销选项的叠加层。当用户单击注销时,它应该执行某些操作,并且当用户单击 div 覆盖之外时应该隐藏。我没能做到这一点。
我尝试使用 tabIndex 将焦点放在 div 上,但随后退出选项不再可点击。
Header.js
import React, { Component } from "react";
import ReactDOM from "react-dom";
class MainHeader extends React.Component {
constructor(props) {
super(props);
this.state = {
logOutShown: false
};
}
render() {
var guiResult = [];
if (this.state.logOutShown) {
guiResult.push(
<div className="Login__Overlay__Frame">
<div className="User__Login__Overlay">
<div className="Login__Content" tabIndex="1" onFocus={this.alerting.bind(this)} onBlur={this.toggleOverlay.bind(this)}>Signout</div>
</div>
</div>
);
}
return (
<div className="Header__Icon">
<div className="Icons__Log__In" tabIndex="0" onClick={this.validate.bind(this)} onBlur={this.toggleOverlay.bind(this)}/>
{guiResult}
</div>
);
}
toggleOverlay(){
console.log("toggle overlay");
this.setState({ logOutShown: false});
}
validate() {
console.log("validate:");
this.setState(
{
logOutShown: true
}
);
}
【问题讨论】:
-
您可以将处理程序添加到覆盖
<div className="User__Login__Overlay" onClick={this.toggleOverlay.bind(this)}> -
可以查看点击overlay,但是有问题!!。当您单击叠加层内的任何内容时,它也会拾取它。我倾向于做的是创建一个组件来做overlay,overlay里面有一个容器,这个容器附加到onClick并调用
event.stopPropagation()。然后,这将停止点击您的内容,触发叠加层上的事件。 -
@Keith 我现在将通过创建一个新的叠加组件来尝试一下。可能是你能提供我新组件的整体结构看起来像我在这个“覆盖层内部有一个容器,这个容器附加到 onClick 并调用 event.stopPropagation()”
-
@Kirill 正如 Keith 所说,它不起作用。
-
我看看能不能快速敲出一个sn-p。给我们 10..
标签: javascript html reactjs onclick hide