【问题标题】:Material UI - body scroll lockedMaterial UI - 身体滚动锁定
【发布时间】:2022-01-06 04:05:00
【问题描述】:

在我运行项目期间,我使用的是 Material UI。我正在为我的网站设计一个仪表板。 然后我注意到每次打开菜单列表时我的滚动条都被挡住了。 就像下图一样:

我从MaterialUI official webiste 复制了这段代码。我仍然阻止滚动条。代码在哪里:

import * as React from 'react';
import AppBar from '@mui/material/AppBar';
import Box from '@mui/material/Box';
import Toolbar from '@mui/material/Toolbar';
import IconButton from '@mui/material/IconButton';
import Typography from '@mui/material/Typography';
import Menu from '@mui/material/Menu';
import MenuIcon from '@mui/icons-material/Menu';
import Container from '@mui/material/Container';
import Avatar from '@mui/material/Avatar';
import Button from '@mui/material/Button';
import Tooltip from '@mui/material/Tooltip';
import MenuItem from '@mui/material/MenuItem';

const pages = ['Products', 'Pricing', 'Blog'];
const settings = ['Profile', 'Account', 'Dashboard', 'Logout'];

const ResponsiveAppBar = () => {
  const [anchorElNav, setAnchorElNav] = React.useState<null | HTMLElement>(null);
  const [anchorElUser, setAnchorElUser] = React.useState<null | HTMLElement>(null);

  const handleOpenNavMenu = (event: React.MouseEvent<HTMLElement>) => {
    setAnchorElNav(event.currentTarget);
  };
  const handleOpenUserMenu = (event: React.MouseEvent<HTMLElement>) => {
    setAnchorElUser(event.currentTarget);
  };

  const handleCloseNavMenu = () => {
    setAnchorElNav(null);
  };

  const handleCloseUserMenu = () => {
    setAnchorElUser(null);
  };

  return (
    <AppBar position="static">
      <Container maxWidth="xl">
        <Toolbar disableGutters>
          <Typography
            variant="h6"
            noWrap
            component="div"
            sx={{ mr: 2, display: { xs: 'none', md: 'flex' } }}
          >
            LOGO
          </Typography>

          <Box sx={{ flexGrow: 1, display: { xs: 'flex', md: 'none' } }}>
            <IconButton
              size="large"
              aria-label="account of current user"
              aria-controls="menu-appbar"
              aria-haspopup="true"
              onClick={handleOpenNavMenu}
              color="inherit"
            >
              <MenuIcon />
            </IconButton>
            <Menu
              id="menu-appbar"
              anchorEl={anchorElNav}
              anchorOrigin={{
                vertical: 'bottom',
                horizontal: 'left',
              }}
              keepMounted
              transformOrigin={{
                vertical: 'top',
                horizontal: 'left',
              }}
              open={Boolean(anchorElNav)}
              onClose={handleCloseNavMenu}
              sx={{
                display: { xs: 'block', md: 'none' },
              }}
            >
              {pages.map((page) => (
                <MenuItem key={page} onClick={handleCloseNavMenu}>
                  <Typography textAlign="center">{page}</Typography>
                </MenuItem>
              ))}
            </Menu>
          </Box>
          <Typography
            variant="h6"
            noWrap
            component="div"
            sx={{ flexGrow: 1, display: { xs: 'flex', md: 'none' } }}
          >
            LOGO
          </Typography>
          <Box sx={{ flexGrow: 1, display: { xs: 'none', md: 'flex' } }}>
            {pages.map((page) => (
              <Button
                key={page}
                onClick={handleCloseNavMenu}
                sx={{ my: 2, color: 'white', display: 'block' }}
              >
                {page}
              </Button>
            ))}
          </Box>

          <Box sx={{ flexGrow: 0 }}>
            <Tooltip title="Open settings">
              <IconButton onClick={handleOpenUserMenu} sx={{ p: 0 }}>
                <Avatar alt="Remy Sharp" src="/static/images/avatar/2.jpg" />
              </IconButton>
            </Tooltip>
            <Menu
              sx={{ mt: '45px' }}
              id="menu-appbar"
              anchorEl={anchorElUser}
              anchorOrigin={{
                vertical: 'top',
                horizontal: 'right',
              }}
              keepMounted
              transformOrigin={{
                vertical: 'top',
                horizontal: 'right',
              }}
              open={Boolean(anchorElUser)}
              onClose={handleCloseUserMenu}
            >
              {settings.map((setting) => (
                <MenuItem key={setting} onClick={handleCloseNavMenu}>
                  <Typography textAlign="center">{setting}</Typography>
                </MenuItem>
              ))}
            </Menu>
          </Box>
        </Toolbar>
      </Container>
    </AppBar>
  );
};
export default ResponsiveAppBar;

我必须做些什么来修复这个错误?

【问题讨论】:

    标签: reactjs material-ui


    【解决方案1】:

    我不确定这是否与您的其他代码一样存在问题,我们看不到。

    但我猜你有这样的事情:

    export default function App(){
        return (
          <div className="root">
            <ResponsiveAppBar />
            <div className="image-background-1">
              <h1>Some text</h1>
            </div>
            <div className="image-background-2">
              <h1>Some text</h1>
            </div>
            <div className="image-background-3">
              <h1>Some text</h1>
            </div>
          </div>
             
        )
    }
    

    在这种情况下,整个“根”div 都在滚动,但在您的设计中,我们真的只想滚动带有图像背景的 divs。

    要解决此问题,请将这些 div 包装在具有 overflow-y: scroll 的 div 中:

    export default function App(){
        return (
          <div className="root">
            <ResponsiveAppBar />
            <div style={{overflowY: "scroll"}}>
                <div className="image-background-1">
                  <h1>Some text</h1>
                </div>
                <div className="image-background-2">
                  <h1>Some text</h1>
                </div>
                <div className="image-background-3">
                  <h1>Some text</h1>
                </div>
            </div>
          </div>
             
        )
    }
    

    您可能还需要在 root div 上设置 overflow: "hidden"

    【讨论】:

      【解决方案2】:

      问题来自 Menu 组件,当它打开时,它会将 body 元素溢出设置为隐藏。

      要停止这种情况,请将 disableScrollLock 属性设置为 true。

      <Menu
        ...others
        disableScrollLock={true}
      >
      
      </Menu>
      

      【讨论】:

        猜你喜欢
        • 2021-11-03
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 2017-04-12
        • 2021-04-05
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        相关资源
        最近更新 更多