You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据屏幕尺寸修改MUI(Material UI)Drawer的anchor属性值

实现Drawer根据屏幕尺寸切换展开方向

要让Drawer在移动端从右侧展开、PC端从左侧展开,核心思路是动态检测屏幕宽度,根据尺寸阈值切换anchor属性值。以下是两种实用实现方案:

方案一:使用Material-UI的useMediaQuery(推荐)

如果你的项目基于Material-UI,直接用官方提供的useMediaQuery钩子可以轻松适配主题断点,代码更简洁:

import { useMediaQuery, Theme } from '@mui/material/styles';
import Drawer from '@mui/material/Drawer';

function YourComponent() {
  // 以768px为移动端分界(对应MUI的sm断点,可按需修改)
  const isMobile = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'));
  // 根据设备类型设置展开方向
  const drawerAnchor = isMobile ? 'right' : 'left';

  return (
    <Drawer anchor={drawerAnchor} open={true}>
      My Drawer
    </Drawer>
  );
}

方案二:原生JS监听窗口尺寸变化

如果不用UI库的工具,用React的useState+useEffect监听窗口 resize 事件也能实现:

import { useState, useEffect } from 'react';
import Drawer from '@mui/material/Drawer';

function YourComponent() {
  // 初始化时判断当前屏幕尺寸
  const [isMobile, setIsMobile] = useState(window.innerWidth < 768);

  useEffect(() => {
    // 窗口尺寸变化时更新状态
    const handleResize = () => {
      setIsMobile(window.innerWidth < 768);
    };

    window.addEventListener('resize', handleResize);
    // 组件卸载时移除监听,避免内存泄漏
    return () => window.removeEventListener('resize', handleResize);
  }, []);

  const drawerAnchor = isMobile ? 'right' : 'left';

  return (
    <Drawer anchor={drawerAnchor} open={true}>
      My Drawer
    </Drawer>
  );
}

注意事项

  • 可以根据项目需求调整移动端的尺寸阈值(比如把768px改成640px);
  • 如果使用其他UI框架的Drawer组件,核心逻辑完全一致,只需替换对应的Drawer组件导入即可。

内容的提问来源于stack exchange,提问作者jokie me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 08:05:13