React Interface without (left) and with (right) animations
In this article, I am going to use the official components from React.js addons. There are other components/libraries that are better for the job but at the end of the article you will get a good amount of React.js animation practice to better understand these other components.
First the CSSTransitionGroup
is covered:
const List = ({items, onRemoveItem}) => {
const listItems = items.map((item, idx) => {
return <ListItem key={item} onClick={onRemoveItem.bind(this, idx)}/>
})
return (
<div className="list">
<CSSTransitionGroup transitionName="list__item-" transitionEnterTimeout={500} transitionLeaveTimeout={500}>
{listItems}
</CSSTransitionGroup>
</div>
)
}
@keyframes add-item {
from { transform: scale(0, 0); }
75% { transform: scale(1.1, 1.1); }
to { transform: scale(1, 1); }
}
@keyframes remove-item {
from { transform: scale(1, 1); }
25% { transform: scale(1.1, 1.1); }
to { transform: scale(0, 0); }
}
.list__item--enter {
animation-name: add-item;
animation-duration: 500ms;
}
.list__item--leave {
background: #bf4a3c;
animation-name: remove-item;
animation-duration: 520ms;
}
Once you get the gist of CSSTransitionGroup
, the move to the underlying TransitionGroup
(which gives you more control, yet is more “raw” in use) is easy
Improve React.js apps with Motion Design →
Improve React.js apps with Motion Design Source (GitHub) →