代码之家  ›  专栏  ›  技术社区  ›  Spadar Shut

反应弹簧过渡不动画进入状态

  •  1
  • Spadar Shut  · 技术社区  · 6 年前

    我正在使用接收子元素和布尔值的react spring制作折叠组件 collapsed 支柱。 这是相当基本的,但出于某种原因,当安装孩子时,动画不会运行,同时保持动画效果良好。

    这是组件的外观

    const baseStyles = {
      overflow: "hidden"
    };
    const openStyles = {
      height: "auto"
    };
    const collapsedStyles = {
      height: 0
    };
    const animationConfig = {
      duration: 1000
    };
    const Collapse = ({ collapsed, children, ...props }) => {
      return (
        <Transition
          items={collapsed}
          native
          config={animationConfig}
          from={baseStyles}
          enter={openStyles}
          leave={collapsedStyles}
          // onFrame={console.log}
          {...props}
        >
          {collapsed => !collapsed
              ? style => <animated.div style={style} children={children} />
              : null
          }
        </Transition>
      );
    };
    

    这是工作代码 https://codesandbox.io/s/459p84ky4 我是在做错事,还是在反作用弹簧中出了问题?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Just code    6 年前

    你需要理解 from enter 两个道具中都没有应用任何内容,这意味着不透明度始终为1,因此动画不起作用。

    意味着它在初始阶段应该是什么,以及 进入 意味着渲染时应该是什么。

    所以,你需要在 在里面设为1 进入

    const baseStyles = {
      background: "rgba(255,0,0,.2)",
      overflow: "hidden",
      opacity:0
    };
    const openStyles = {
      height: "auto",
      opacity: 1
    };
    

    编辑:

    如果要将高度从零设置为自动,则需要首先将高度从0设置为0

    const baseStyles = {
      background: "rgba(255,0,0,.2)",
      overflow: "hidden",
      height: 0
    };
    const openStyles = {
      height: "auto",
      opacity: 1
    };
    

    Demo