React MUI Menu右侧滑入过渡效果失效问题及实现方法咨询
嘿,作为React和MUI新手,踩这个坑太正常啦!你之前的问题在于:transitionDuration属性只是控制MUI Menu默认过渡动画的时长,但默认动画是淡入+缩放,根本不是你想要的右侧滑入效果,所以改这个数值自然没反应。咱们得自定义过渡组件来实现滑入效果,具体步骤如下:
1. 导入必要的组件
首先要引入MUI的Slide过渡组件(它专门用来做滑入滑出动画):
import { Menu, MenuItem, Slide } from '@mui/material';
2. 配置Menu的过渡组件
把Slide组件通过TransitionComponent属性传给Menu,同时指定滑入方向为right,还要调整Menu的定位参数让它从右侧弹出:
import { useState } from 'react'; import { Menu, MenuItem, Slide } from '@mui/material'; function App() { const [open, setOpen] = useState(false); // 如果你是用按钮触发菜单,这里替换成触发元素的ref const anchorEl = null; const handleOpen = () => setOpen(true); const handleClose = () => setOpen(false); return ( <div> {/* 示例触发按钮,比如汉堡菜单按钮 */} <button onClick={handleOpen}>打开菜单</button> <Menu open={open} onClose={handleClose} // 指定过渡组件为Slide TransitionComponent={Slide} // 设置Slide的方向为右侧滑入 TransitionProps={{ direction: 'right' }} // 调整菜单定位,让它贴合右侧边缘 anchorOrigin={{ vertical: 'top', horizontal: 'right' }} transformOrigin={{ vertical: 'top', horizontal: 'right' }} // 设置过渡时长,单位为毫秒 transitionDuration={500} className="nav" > <MenuItem onClick={handleClose}>Home</MenuItem> <MenuItem onClick={handleClose}>About</MenuItem> <MenuItem onClick={handleClose}>Contact</MenuItem> </Menu> </div> ); } export default App;
3. 关键部分解释
TransitionComponent={Slide}:告诉Menu放弃默认的淡入缩放动画,改用Slide组件实现滑入效果TransitionProps={{ direction: 'right' }}:给Slide组件传递参数,明确动画方向为从右侧滑入anchorOrigin和transformOrigin:这两个属性用来调整Menu的弹出位置,让它从屏幕右侧边缘开始显示,配合Slide动画更自然transitionDuration:现在这个属性就能控制滑入动画的时长了,单位是毫秒(比如500就是0.5秒)
4. 额外样式优化(可选)
如果觉得菜单宽度太窄,可以通过sx属性自定义样式:
<Menu // 其他属性不变 sx={{ '& .MuiPaper-root': { width: 250, // 设置菜单宽度 maxWidth: '100%' } }} > {/* MenuItem内容 */} </Menu>
这样修改后,你的Menu就能从右侧平滑滑入了,试试吧!
内容的提问来源于stack exchange,提问作者manoop m
相关产品推荐
相关产品推荐

