ユーザーが[開く]ボタンをクリックしたときにスライドしたい私の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 {
left: -100%;
transition: left 300ms linear;
}
.dialog-enter-active {
left: 0;
}
.dialog-exit {
left: 0;
transition: left 300ms linear;
}
.dialog-exit-active {
left: -100%;
}
_
こちら 作業コードです。
ここでの問題は、React-Modalがその実装点として反応ポータルを使用することです。そのため、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 PROPをモーダルに追加する必要があります。
<Modal
closeTimeoutMS={500}
isOpen={this.state.isOpen}
style={modalStyles}
>
_