【发布时间】:2020-11-02 05:21:32
【问题描述】:
在我的应用程序中,我有 divs,我想根据组件状态(例如加载)来调暗和禁用鼠标事件。我想出的初始方法是有一个辅助函数,它返回一个内联样式,用于调暗元素并禁用其上的指针事件,给定一个布尔值:
const disableOnTrue = (flag) => {
return {
opacity: flag ? 0.15 : 1,
pointerEvents: flag ? "none" : "initial"
}
}
并在这样的元素上使用它:
{loading && {/** render a loading circle */}}
<div style={disableOnTrue(this.state.loading)}>{/** stuff to be dimmed & disabled while loading */}</div>
在禁用的div中,有Material-UI Buttons。然而,事实证明,他们并不关心 pointerEvents 是否在其父 div 上被禁用,并且仍然可点击,这是一个大问题。所以,在Buttons 我必须设置disabled={loading}。然后,这会使Buttons 本身变暗,这不必要地与disableOnTrue 的降低opacity 复合,这意味着我需要添加一些自定义样式来改善它;我希望整个div 被禁用,而不是让Button 看起来特别禁用。
我也尝试过使用 Material 中的 Backdrop 组件,但除了整个视口之外,无法让它变暗。
在我在整个应用程序中实施任何类型的 hacky 解决方案之前,我想我应该在这里询问是否有一种干净的方法来实现我所缺少的。找了好久都没找到。
【问题讨论】:
-
使用你正在使用的 MUI 元素的 material-ui styling 和 CSS 类名?
-
@DrewReese 你能详细说明一下这对我的问题有什么帮助吗?
-
我相信您可能面临的问题是不透明度,但是通过使用 MUI 的样式 API,您可以直接访问/设置所用 DOM 元素的样式,而不是使用大的钝 div 来平等地影响所有包裹的元素.许多 MUI 组件也已经使用 disabled 属性来“将它们变灰”或使其无法交互。
标签: html css reactjs material-ui