react-flop-card
v0.3.2
Published
Card component with flip animation implement in React Motion
Downloads
11
Maintainers
Readme
React Flop Card
Yet another React flip card component. Animation was done with React-Motion instead of CSS transition.
import { FlipCard } from 'react-flop-card';
// in your render
<FlipCard
flipped={ true } onClick={ onClick }
onMouseOut={ onMouseOut } onMouseOver={ onMouseOver }
frontChild={ frontChild } backChild={ backChild }
width={ 100 } height={ 100 }
style={ { frontStyle, backStyle, wrapperStyle } }/>
Install
npm install --save react-flop-card
Demo
http://pckhoi.github.io/react-flop-card-demo.html
Code from the above demo:
import React, { Component } from 'react';
import { FlipCard } from 'react-flop-card';
export default class Demo extends Component {
constructor(props) {
super(props);
this.state = {
flippedKey: null
};
this.cards = Array.apply(null, {length: 64}).map((val, ind) => ({
key: String(ind),
style: {
front: this.getFrontStyle(ind),
back: backStyle,
wrapper: wrapperStyle
},
frontChild: (<noscript/>),
backChild: (<p style={ letterStyle }>{ randomLetter() }</p>),
onMouseOver: () => { this.setState({ flippedKey: String(ind) }); },
onMouseOut: () => { this.setState({ flippedKey: null }); }
}));
}
getFrontStyle(ind) {
const y = (ind - ind % 8) / 8 * -104;
const x = ind % 8 * -104 -300;
const backgroundStyle = `url("img/food-dinner-lemon-rice.jpg") ${x}px ${y}px/auto`;
return {
background: backgroundStyle,
borderRadius: '20px'
};
}
render() {
return (
<div style={ containerStyle }>
{ this.cards.map(({
key, frontChild, backChild, onMouseOver, onMouseOut, style
}) => (
<FlipCard
key={ key }
flipped={ this.state.flippedKey === key }
onMouseOut={ onMouseOut } onMouseOver={ onMouseOver }
frontChild={ frontChild } backChild={ backChild }
width={ 100 } height={ 100 } style={ style }/>
)) }
</div>
);
}
}
const backStyle = {
backgroundColor: 'green',
borderRadius: '20px'
};
const letterStyle = {
color: 'white',
fontSize: '40px',
margin: '28px 0',
textAlign: 'center',
fontFamily: 'sans-serif'
};
const containerStyle = {
fontSize: 0,
width: '832px',
margin: '0 auto'
};
const wrapperStyle = {
display: 'inline-block',
margin: '2px'
};
function randomLetter() {
const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
return possible.charAt(
Math.floor(Math.random() * possible.length)
);
}
API
exports
FlipCard
RotateCard
<FlipCard/>
Usage
<FlipCard
flipped={ true } onClick={ onClick }
onMouseOut={ onMouseOut } onMouseOver={ onMouseOver }
frontChild={ frontChild } backChild={ backChild }
width={ 100 } height={ 100 }
style={ { front, back, wrapper } }/>
Props
All props are optional.
- flipped: boolean
Control whether the card will show (or animate toward) front side or back side.
- onClick: function
Trigger when clicked on.
- onMouseOut: function
Trigger when no longer hovered.
- onMouseOver: function
Trigger when hovered.
- frontChild: React element
The element to display in the front of card.
- backChild: React element
The element to display in the back of card.
- width: number or string
If width is given as number, it will be automatically converted to px. If you want to use units other than px, supply a string instead. If not given then width will not be set (no default value).
- height: number
Same as width.
- style: object
- style.front: object - style that apply to wrapper of
frontChild
. - style.back: object - style that apply to wrapper of
backChild
. - style.wrapper: object - style that apply to outer wrapper.
- style.front: object - style that apply to wrapper of
<RotateCard/>
This is a low level component with no animation. The plus side is that you can easily control it's rotate angle with degree
prop.
Usage
<RotateCard
degree={ 180 } onClick={ onClick }
onMouseOut={ onMouseOut } onMouseOver={ onMouseOver }
frontChild={ frontChild } backChild={ backChild }
width={ 100 } height={ 100 }
style={ { front, back, wrapper } }/>
Props
Same as FlipCard
except it doesn't have flipped
prop. Instead it has degree
prop.
- degree: number
degree={ 0 }
is the same asflipped={ false }
whereasdegree={ 180 }
is the same asflipped={ true }
.
License
MIT