material-ui - 如何在 Popper 中使用背景阴影?
问题描述
类似于 Drawer/Dialog 如何放置背景阴影,我如何对 Popper 组件做同样的事情?
解决方案
您可以使用Backdrop组件完成此操作。这是一个示例,使用Simple Popper 演示代码作为起点:
class SimplePopper extends React.Component {
state = {
anchorEl: null,
open: false
};
handleClick = event => {
const { currentTarget } = event;
this.setState(state => ({
anchorEl: currentTarget,
open: !state.open
}));
};
render() {
const { classes } = this.props;
const { anchorEl, open } = this.state;
const id = open ? "simple-popper" : null;
return (
<React.Fragment>
<Backdrop open={open} onClick={() => this.setState({ open: false })} />
<div>
<Button
aria-describedby={id}
variant="contained"
onClick={this.handleClick}
>
Toggle Popper
</Button>
<Popper id={id} open={open} anchorEl={anchorEl} transition>
{({ TransitionProps }) => (
<Fade {...TransitionProps} timeout={350}>
<Paper>
<Typography className={classes.typography}>
The content of the Popper.
</Typography>
</Paper>
</Fade>
)}
</Popper>
</div>
</React.Fragment>
);
}
}
请注意这里的关键补充:
<Backdrop open={open} onClick={() => this.setState({ open: false })} />
由于Backdrop
组件使用与组件相同的open
状态作为其open
道具Popper
,因此只要弹出器打开,它就会出现。
该onClick
道具允许用户通过单击背景上的任意位置来关闭弹出器和背景。如果您不想要此功能,则可以排除该道具:
<Backdrop open={open} />
推荐阅读
- asp.net - asp.net core 2,身份 w/windows 身份验证,但数据库管理角色
- go - 努力用 gogradle 编译 go 项目
- android - Android Studio 使状态栏背景完全透明并更改图标颜色
- android - 拦截调用以刷新令牌 GRPC
- d3.js - DC.js - 选择菜单作为复合图表的过滤器
- shiny - Shiny 无法连接到 ODBC
- android - 如何在不隐藏片段的情况下从选项卡主机中隐藏一个指示器
- sql - SQL Server studio 函数变量范围错误
- teamcity - TeamCity 动态参数
- c# - 根据对象的水平移动速度设置动画器浮动