跳到内容
+

Transitions

过渡效果有助于使 UI 更具表现力且易于使用。

Material UI 提供了可用于为您的应用程序引入一些基本动画效果的过渡。

Collapse

从子元素的起始边缘展开。如果需要水平折叠,请使用 orientation 属性。collapsedSize 属性可用于设置未展开时的最小宽度/高度。

Fade

从透明到不透明淡入。

Enter 开始编辑

Grow

从子元素中心向外扩展,同时从透明到不透明淡入。

第二个示例演示了如何更改 transform-origin,并有条件地应用 timeout 属性来更改进入速度。

Enter 开始编辑

Slide

从屏幕边缘滑入。direction 属性控制过渡从屏幕的哪个边缘开始。

Transition 组件的 mountOnEnter 属性阻止子组件在 intrue 之前挂载。这防止了相对定位的组件从屏幕外位置滚动到视图中。类似地,unmountOnExit 属性在组件过渡到屏幕外后将其从 DOM 中移除。

Enter 开始编辑

相对于容器滑动

Slide 组件还接受 container 属性,该属性是对 DOM 节点的引用。如果设置了此属性,Slide 组件将从该 DOM 节点的边缘滑动。

Enter 开始编辑

Zoom

从子元素中心向外扩展。

此示例还演示了如何延迟进入过渡。

Enter 开始编辑

子组件要求

  • 转发样式:为了更好地支持服务器端渲染,Material UI 为某些过渡组件(Fade、Grow、Zoom、Slide)的子组件提供了 style 属性。必须将 style 属性应用于 DOM,动画才能按预期工作。
  • 转发 ref:过渡组件要求第一个子元素将其 ref 转发到 DOM 节点。有关 ref 的更多详细信息,请查看 Caveat with refs
  • 单个元素:过渡组件仅需要一个子元素(不允许使用 React.Fragment)。
// The `props` object contains a `style` prop.
// You need to provide it to the `div` element as shown here.
const MyComponent = React.forwardRef(function (props, ref) {
  return (
    <div ref={ref} {...props}>
      Fade
    </div>
  );
});

export default function Main() {
  return (
    <Fade>
      {/* MyComponent must be the only child */}
      <MyComponent />
    </Fade>
  );
}

TransitionGroup

要在组件挂载或卸载时为其添加动画效果,您可以使用来自 react-transition-group 的 TransitionGroup 组件。当组件添加或删除时,in 属性由 TransitionGroup 自动切换。

  • 🍏 苹果
  • 🍌 香蕉
  • 🍍 菠萝
Enter 开始编辑

TransitionComponent 属性

一些 Material UI 组件在内部使用这些过渡效果。这些组件接受 TransitionComponent 属性以自定义默认过渡效果。您可以使用上述任何组件或您自己的组件。它应遵循以下条件

  • 接受 in 属性。这对应于打开/关闭状态。
  • 当进入过渡开始时,调用 onEnter 回调属性。
  • 当退出过渡完成时,调用 onExited 回调属性。这两个回调允许在关闭状态且完全过渡时卸载子组件。

有关创建自定义过渡的更多信息,请访问 react-transition-group Transition 文档。您还可以访问某些组件的专用部分

性能 & SEO

即使 in={false},默认情况下也会挂载过渡组件的内容。此默认行为考虑了服务器端渲染和 SEO。如果您在过渡效果内渲染昂贵的组件树,则最好通过启用 unmountOnExit 属性来更改此默认行为

<Fade in={false} unmountOnExit />

与任何性能优化一样,这并非万能药。请务必先找出瓶颈,然后再尝试这些优化策略。

API

请参阅下面的文档,以获取此处提及的组件的所有可用属性和类的完整参考。