UNPKG

react-router-page-transition

Version:

Highly customizable page transition component for your your React Router

89 lines (80 loc) 2.01 kB
import React from 'react'; import { Link } from 'react-router'; export default class ItemDetailPage extends React.Component { constructor(...args) { super(...args); this.state = { doTransform: false, position: null, color: null, }; } onTransitionWillStart(data) { if (!data.clickedItemData) { // Default animate position if user goto this page directly this.setState({ doTransform: true, position: { top: 0, left: 0, height: 10, width: 10 }, color: 'gray', borderRadius: 200, }); return; } this.setState({ doTransform: true, position: data.clickedItemData.position, color: data.clickedItemData.color, borderRadius: data.clickedItemData.position.width * 2, }); } onTransitionDidEnd() { // Do your stuff here } transitionManuallyStart() { this.setState({ position: { top: 0, height: '100%', left: 0, width: '100%', }, borderRadius: 0, doTransform: true, }); } transitionManuallyStop() { this.setState({ doTransform: false, }); } render() { return ( <div style={{ transform: this.state.doTransform ? `translate3d(0, ${this.state.position.top}px, 0)` : undefined, height: this.state.doTransform ? this.state.position.height : null, left: this.state.doTransform ? this.state.position.left : null, width: this.state.doTransform ? this.state.position.width : null, backgroundColor: this.state.color, borderRadius: this.state.borderRadius, }} className="transition-item detail-page" > <Link className="text-center" to="/"> Item {this.props.params.itemId} </Link> <h1> Detail page here </h1> <Link to="/"> Back </Link> </div> ); } }