反应元素宽度动画

mar*_*son 4 javascript css animation reactjs

在我的基于 React 的应用程序中,我尝试执行一个简单的 css3 宽度转换,例如:

.foo {
    transition: width 1s ease-in-out;
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是在反应组件中的元素内设置一个样式,即“width: xx%”,并将其从 0% 动画到 xx%。由于渲染时的元素已经具有此属性,因此动画不起作用。我研究了“ReactCSSTransitionGroup”,但没有更接近解决方案。我开始在组件渲染后使用 setTimeOut 来设置样式属性,但感觉非常混乱和“hackish”。有人能指出我正确的方向吗?

Sta*_*nko 6

如果您尝试在渲染后为组件设置动画(从 0 到 n%),您可以通过setState调用componentDidMount. 由于浏览器不会重新渲染同一动画帧中已更改的内容,而是合并更改并渲染最终结果,因此您需要将其包装在requestAnimationFrame

我在这篇博文中对此进行了彻底的解释。

代码如下所示:

export default class AnimateMe extends Component {
  state = {
    width: 0
  };

  componentDidMount() {
    requestAnimationFrame(() => {
      this.setState({ width: "75%" });
    });
  }

  render() {
    return (
      <div style={{ width: this.state.width }}>
        Animate my width
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我做了一个工作示例: https ://codesandbox.io/s/7z1j794oy1

希望有帮助!