反应CSSTransition不动画

黑夜

我想在我的Web应用程序中为一个框(淡入,淡出)设置动画。我正在为此使用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;
}

是工作代码。单击“打开模态”以打开模态,然后单击“切换框”以打开/关闭我要设置动画的框。

编辑:我实际上是试图使框滑入和滑出时切换。这是

更新的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;

更新的代码链接

彼得·安布鲁斯

您必须完全信任对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:现实风格。

.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%;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章