9

我有一个相当复杂的应用程序,有多个抽屉。我遇到了右侧抽屉动画的问题。抽屉本身的动画效果很好,但父 div 没有。我尝试将抽屉的相同动画应用于父 div,但这并没有解决我的问题。我已经在 CodeSandbox 中复制了这个问题。见下文。

例子

4

2 回答 2

3

我们的具体用例相当复杂,但我认为我们已经设法找到了解决办法。本质上,我们必须对<main>元素应用过渡,并根据右侧工具栏的状态设置其边距。见下文。

main: {
    position: 'relative',
    flex: 1,
    height: '100%',
    overflow: 'hidden',
    transition: theme.transitions.create('margin', {
      easing: theme.transitions.easing.easeOut,
      duration: theme.transitions.duration.enteringScreen,
    }),
    marginRight: -500,
  },
  mainRightOpen: {
    transition: theme.transitions.create('margin', {
      easing: theme.transitions.easing.easeOut,
      duration: theme.transitions.duration.enteringScreen,
    }),
    marginRight: 0,
  }

并像这样实施......

<main
  className={`${classes.main}
    ${this.props.rightToolBarOpen ? classes.mainRightOpen : null}
   `}
  ref={(mainContent) => { this.mainContent = mainContent; }}
>
于 2018-10-26T20:52:32.737 回答
0

此外,如果您不想要固定边距值,您可以考虑使用百分比进行边距控制,例如:

// define the drawerWidth

const drawerWidth = 33.33333;

// put margin value as a string format like below: 

content: {
  flexGrow: 1,
  padding: theme.spacing(6),
  transition: theme.transitions.create('margin', {
    easing: theme.transitions.easing.sharp,
    duration: theme.transitions.duration.leavingScreen,
  }),
  marginRight: `${-drawerWidth}%`,
},
contentShift: {
  transition: theme.transitions.create('margin', {
    easing: theme.transitions.easing.easeOut,
    duration: theme.transitions.duration.enteringScreen,
  }),
  marginRight: 0,
},

以上解决方案适用于我(我正在使用的 Material-UI 版本:v4.12.1)

于 2021-07-19T23:09:11.727 回答