-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathVelocityTransitionGroup.jsx
127 lines (117 loc) · 2.44 KB
/
VelocityTransitionGroup.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/**
* Adapted from https://github.com/Khan/react-components/blob/master/js/timeout-transition-group.jsx
*/
var React = require('react/addons');
var ReactTransitionGroup = React.addons.TransitionGroup;
var Velocity = require('velocity-animate');
var transitions = {
// Forcefeeding: property order = [after, before]
'slide-forward': {
duration: 200,
enter: {
translateX: [ '0%', '100%' ],
},
leave: {
translateX: [ '-100%', '0%' ],
}
},
'slide-back': {
duration: 200,
enter: {
translateX: [ '0%', '-100%' ],
},
leave: {
translateX: [ '100%', '0%' ],
}
},
'slideover-forward': {
duration: 200,
enter: {
translateX: [ '0%', '100%' ],
zIndex: [ 1, 1 ]
},
leave: {
// translateX: [ '0%', '0%' ],
zIndex: [ 0, 0 ]
}
},
'slideover-back': {
duration: 200,
enter: {
// translateX: [ '0%', '0%' ],
zIndex: [ 0, 0 ]
},
leave: {
translateX: [ '100%', '0%' ],
zIndex: [ 1, 1 ]
}
},
default: {
duration: 200,
enter: {
opacity: [ 1, 0 ],
},
leave: {
opacity: [ 0, 1 ],
}
}
};
var VelocityTransitionGroupChild = React.createClass({
propTypes: {
transitionName: React.PropTypes.string.isRequired,
},
_getTransition: function() {
if (!transitions[this.props.transitionName]) {
console.warn('TransitionName ' + this.props.transitionName + ' wasn\'t found in VelocityTransitionGroupChild transitions.');
}
return transitions[this.props.transitionName] || transitions.default;
},
componentWillEnter: function(done) {
var node = this.getDOMNode();
var transition = this._getTransition();
Velocity(
node,
transition.enter,
{
duration: transition.duration,
complete: done
});
},
componentWillLeave: function(done) {
var node = this.getDOMNode();
var transition = this._getTransition();
Velocity(
node,
transition.leave,
{
duration: transition.duration,
complete: done
});
},
render: function() {
return React.Children.only(this.props.children);
}
});
var VelocityTransitionGroup = React.createClass({
propTypes: {
transitionName: React.PropTypes.string.isRequired,
},
_wrapChild: function(child) {
return (
<VelocityTransitionGroupChild
transitionName={this.props.transitionName}
>
{child}
</VelocityTransitionGroupChild>
);
},
render: function() {
return (
<ReactTransitionGroup
{...this.props}
childFactory={this._wrapChild}
/>
);
}
});
module.exports = VelocityTransitionGroup;