如何使用 Slide 组件的容器设置输入/输出动画?

Posted

技术标签:

【中文标题】如何使用 Slide 组件的容器设置输入/输出动画?【英文标题】:How to set in/out animations with container for the Slide component? 【发布时间】:2021-12-15 13:27:44 【问题描述】:

我想要一个组件在挂载时向右执行幻灯片动画,卸载时向左执行幻灯片动画,全部使用属于“profile-slide-container”类的div作为Slide的容器组件,但我不知道该怎么做。

代码如下:

function Main()
  const [showProfileMenu, setShowProfileMenu] = useState(false);
  return(
    <div className="main">
      <Header />
      <div className="profile-slide-container">
      showProfileMenu && <Slide in=true direction="right"><div className="pseudo-left-section"><ProfileMenu onClick=() => setShowProfileMenu(false) /></div></Slide>
      </div>
      <div className="left-section">
            <div>
              <LeftSectionHeader onClick=() => setShowProfileMenu(true) />
              <LangMenu />
            </div>
        </div>
      </div>
  );

【问题讨论】:

你见过this的例子吗? 是的,但他们使用 React.useRef() 之类的东西,并没有真正具体的东西。所以我有点陷入危机 【参考方案1】:

以下是将物品移入和移出容器的正确代码。 您需要创建一个 ref 来保存容器元素的引用和 通过 container 属性将其传递给 Slide 组件。提供容器时, Slide 获取它的边界矩形,然后 calculate the distance 平移到容器边界之外。

您可能还想在容器中设置overlow: 'hidden',以便动画项目 当它移出容器时会消失。

const [checked, setChecked] = React.useState(false);
const containerRef = React.useRef(null);
const handleChange = () => setChecked((prev) => !prev);

return (
  <Box sx= width: `calc(100px + 16px)` >
    <FormControlLabel
      control=<Switch checked=checked onChange=handleChange />
      label="Show"
    />
    <Box
      ref=containerRef
      style=
        marginLeft: 130,
        backgroundColor: 'gray',
        width: 400,
        height: 200,
        overflow: 'hidden',
      
    >
      <Slide direction="right" in=checked container=containerRef.current>
        <Box sx= width: 50, height: 50, bgcolor: 'pink'  />
      </Slide>
    </Box>
  </Box>
);

【讨论】:

哇,非常感谢!这太有用了

以上是关于如何使用 Slide 组件的容器设置输入/输出动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Vue JS 为向导类型的表单设置动画

如何使用角度 BrowserAnimationsModule 为网格框更改设置动画?

Android - 如何获取 android.R.anim.slide_in_right

Unity中的Animation组件(一)

如何在 Flutter 中使用 Android 滚动行为为容器移动设置动画?

mui aniShow 动画属性