【问题标题】:React CSSTransition not animating反应 CSSTransition 没有动画
【发布时间】:2020-02-09 21:57:09
【问题描述】:

我想在我的网络应用程序中为一个框(淡入、淡出)设置动画。我为此使用react-transition-group。但不知何故,动画不起作用。代码

import React from 'react';
import ReactDOM from 'react-dom';
import { CSSTransition } from 'react-transition-group';
import Modal from 'react-modal';

import './styles.css';

class Example extends React.Component {
  state = {
    isOpen: false,
  };

  toggleModal = () => {
    this.setState(prevState => ({
      isOpen: !prevState.isOpen,
    }));
  };
  render() {
    const modalStyles = {
      overlay: {
        backgroundColor: '#ffffff',
      },
    };
    return (
      <div>
        <button onClick={this.toggleModal}>
          Open Modal
        </button>
        <CSSTransition
          in={this.state.isOpen}
          timeout={300}
          classNames="dialog"
        >
          <Modal
            isOpen={this.state.isOpen}
            style={modalStyles}
          >
            <button onClick={this.toggleModal}>
              Close Modal
            </button>
            <div>Hello World</div>
          </Modal>
        </CSSTransition>
      </div>
    );
  }
}

CSS:

.dialog-enter {
  opacity: 0;
  transition: opacity 500ms linear;
}
.dialog-enter-active {
  opacity: 1;
}
.dialog-exit {
  opacity: 0;
}
.dialog-exit-active {
  opacity: 1;
}

.box {
  width: 200px;
  height: 100vh;
  background: blue;
  color: white;
}

Here 是工作代码。点击“Open Modal”打开模态框,然后点击“Toggle Box”打开/关闭我想要动画的框。

编辑:我实际上是想在切换时让盒子滑入和滑出。这里是

更新后的 CSS:

.dialog-enter {
  left: 100%;
  transition: left 1500ms;
 }
.dialog-enter-active {
  left: 0;
}
.dialog-exit {
  left: 0;
  transition: left 1500ms;
}
.dialog-exit-active {
  left: 100%;
}

.box {
  position: absolute;
  width: 200px;
  height: 50vh;
  background: blue;

更新代码link

【问题讨论】:

    标签: javascript css reactjs css-transitions reactcsstransitiongroup


    【解决方案1】:

    您必须完全信任 CSSTransition 的挂载/卸载。

      <CSSTransition
        in={this.state.boxVisible}
        timeout={1500}
        classNames="dialog"
        unmountOnExit
      >
        <div>
          <div className="box">Box</div>
        </div>
      </CSSTransition>
    

    请看这里:https://codesandbox.io/s/csstransition-component-9obbb

    更新: 如果您想按照评论中的要求移动具有左侧 css 属性的元素。您还必须添加 position: realative 样式。

    .dialog-enter {
      left: 100%;
      transition: left 1500ms;
      position: relative;
    }
    .dialog-enter-active {
      left: 0;
    }
    .dialog-exit {
      left: 0;
      transition: left 1500ms;
      position: relative;
    }
    .dialog-exit-active {
      left: 100%;
    }
    

    【讨论】:

    • 即使添加了unmountOnExit,它也只是在打开时消失,而不是在关闭时消失。
    • 因为不透明度值在 css 中被交换为退出。看我的例子。
    • 我更新了链接,不知怎么的更改没有保存。
    • 这在代码 sn-p 中有效。但是为什么需要unmountOnExit?到底发生了什么?不知何故,当应用于我的应用程序时,没有任何变化..
    • 这是我第一次尝试使用 CSSTransition,我只是按照示例进行操作。
    猜你喜欢
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多