reactがCSSを使ってreactアニメーション機能を実現する例
この実例は、reactがCSSを使用してreactアニメーション機能を実現することを述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
reactアニメーション:
reactアニメーション:
import React, { Component } from 'react';
class Boss extends Component {
constructor(props) {
super(props);
this.state = {
isShow:true
}
this.toTogger=this.toTogger.bind(this)
}
render() {
return (
<div>
<div className={this.state.isShow?'show':'hide'}> BOSS-- </div>
<div><button onClick={this.toTogger}> </button></div>
</div>
);
}
toTogger() {
this.setState({
isShow:this.state.isShow?false:true
})
}
}
export default Boss;
css:
.hide{opacity: 1;transition: all 1.5s ease-in;}
.show{opacity: 0;transition: all 1.5s ease-in;}
keyframeアニメーション:
.hide{animation: hide-item 2s ease-in forwards;}
.show{animation: show-item 2s ease-in forwards;}
@keyframes hide-item{
0%{
opacity: 0;
color: red;
}
50%{
opacity: 0.5;
color: saddlebrown;
}
100%{
opacity: 1;
color: yellow;
}
}
@keyframes show-item{
0%{
opacity: 1;
color:green;
}
50%{
opacity: 0.5;
color:greenyellow;
}
100%{
opacity: 0;
color: yellow;
}
}
react-transitio-groupアニメーションライブラリ:
import {CSSTransition} from 'react-transition-group';
render() {
return (
<div>
<CSSTransition
in={this.state.isShow}
timeout={2000}
classNames="boss-text"
unmountOnExit
>
{/* <div className={this.state.isShow?'show':'hide'}> BOSS-- </div> */}
<div> BOSS-- </div>
</CSSTransition>
<div><button onClick={this.toTogger}>{this.state.btn}</button></div>
</div>
);
}
.boss-text-enter{opacity: 0;}
.boss-text-enter-active{opacity: 1;transition: opacity 2000ms;}
.boss-text-enter-done{opacity: 1;}
.boss-text-exit{opacity: 1;}
.boss-text-exit-active{opacity: 0;transition: opacity 2000ms;}
.boss-text-exit-done{opacity: 0;}
マルチDOMアニメーション:
import React, { Component, Fragment } from 'react';
import List from './List.js';
import axios from 'axios';
import Boss from './Boss';
import {CSSTransition,TransitionGroup} from 'react-transition-group'
class Test extends Component {
constructor(props) {
super(props);
this.state={
inputValue:'aaa',
list:[],
}
// this.add=this.add.bind(this);
}
addList() {
this.setState({
list:[...this.state.list,this.state.inputValue],
inputValue:''
})
}
change(e) {
this.setState({
// inputValue:e.target.value
inputValue:this.input.value
})
}
delete(i) {
// console.log(i);
const list = this.state.list;
list.splice(i,1);
this.setState({
list:list
})
}
componentDidMount() {
// console.log('componentDidMount');
axios.get('https://www.easy-mock.com/mock/5e1d3d1564a3c20d7f366f91/ReactDemo1/App')
.then((res)=>{
console.log(' '+JSON.stringify(res));
this.setState({
list:res.data.data
});
})
.catch((error)=>{console.log(' '+error)});
}
render() {
console.log('3-render');
return (
<Fragment>
<div>
<input ref={(input)=>{this.input=input}} value={this.state.inputValue} onChange={this.change.bind(this)}/>
<button onClick={this.addList.bind(this)}> </button>
</div>
<ul>
<TransitionGroup>
{
this.state.list.map((v,i)=>{
return(
<CSSTransition
timeout={2000}
classNames='boss-text'
unmountOnExit
key={i}
>
<List key={i} content={v} index={i} delete={this.delete.bind(this)} />
</CSSTransition>
);
})
}
</TransitionGroup>
</ul>
<Boss/>
</Fragment>
);
}
}
export default Test;
本論文で述べたように、皆さんのreactプログラムの設計に役に立ちます。