javascript React -打开Material UI对话框时启用背景滚动

r1zhe5dt  于 2023-04-28  发布在  Java
关注(0)|答案(3)|浏览(152)

我有一个组件,打开和关闭一个材质用户界面对话框。目前,页面上显示的文本后面跟着一个按钮,用于打开对话框。我创建了一个代码沙盒来突出显示我的位置:https://codesandbox.io/s/formdialog-material-demo-forked-cgjgh?file=/demo.js:0-8775
当对话框打开时,是否可以在后台启用滚动(即例如,在主页面上),使得用户可以滚动文本?我已经包括了hideBackdrop prop 是true,使背景是隐藏的,但我不知道如何做到这一点,所以在主页面上的滚动可以启用。

dgsult0t

dgsult0t1#

对我来说,将“disableScrollLock”属性设置为true解决了这个问题。我在Material UI Modal文档中找到了它:https://mui.com/material-ui/api/modal/

<Dialog open={open} 
        onClose={handleClose} 
        hideBackdrop={true}
        disableScrollLock
  >

我在你的CodeSandbox示例中测试了它,它像预期的那样工作。希望这对你的问题有帮助!

hiz5n14c

hiz5n14c2#

打开对话框时,请禁用主体标记的溢出:隐藏样式属性。

krcsximq

krcsximq3#

你可以使用React Hook useEffect来管理滚动。

const [anchorEl, setAnchorEl] = React.useState(null);

  const handleClick = (event, item) => {
    setAnchorEl(event.currentTarget);
  };

  const open = Boolean(anchorEl);

现在,每当点击发生时,“打开”将为真,或者您可能正在使用其他状态方法来通过管理状态打开Material UI对话框。
这就是useEffect方法

useEffect(() => {
    if (open) {
      document.body.style.overflow = "hidden";
    } else {
      document.body.style.overflow = "scroll";
    }
  }, [open]);

相关问题