【问题标题】:Animate React Modal动画反应模态
【发布时间】:2020-02-09 19:55:11
【问题描述】:

我的网络应用程序中有一个模态框,当用户单击“打开”按钮时,我想将其滑入。我正在使用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 {
  left: -100%;
  transition: left 300ms linear;
}
.dialog-enter-active {
  left: 0;
}
.dialog-exit {
  left: 0;
  transition: left 300ms linear;
}
.dialog-exit-active {
  left: -100%;
}

Here 是工作代码。

【问题讨论】:

    标签: css reactjs react-modal


    【解决方案1】:

    这里的问题是 react-modal 使用 react-portal 作为其安装点。所以它不会被渲染为 CSSTransition 组件的子组件。所以你不能和它一起使用 CSSTransition。

    您可以使用一些自定义 css 来创建过渡效果。它位于react-modal documentation

    因此,如果您将其添加到您的 CSS 中。会有过渡。

    .ReactModal__Overlay {
      opacity: 0;
      transform: translateX(-100px);
      transition: all 500ms ease-in-out;
    }
    
    .ReactModal__Overlay--after-open {
      opacity: 1;
      transform: translateX(0px);
    }
    
    .ReactModal__Overlay--before-close {
      opacity: 0;
      transform: translateX(-100px);
    }
    

    并且我们必须将 closeTimeoutMS 属性添加到模态中才能使关闭动画起作用。

          <Modal
            closeTimeoutMS={500}
            isOpen={this.state.isOpen}
            style={modalStyles}
          >
    

    https://codesandbox.io/s/csstransition-component-forked-7jiwn

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2019-05-16
    • 2020-07-22
    • 1970-01-01
    • 2020-05-18
    • 2019-01-14
    • 2021-05-27
    相关资源
    最近更新 更多