https://blog.csdn.net/scorpio_h/article/details/85205579
添加购物车动画
添加购物车动画要 2个层
- 外面的 div层负责 transform: translate3d(56px, 0, 0) 平移
- 透明度 opacity从 0 到 1的显示过程
- 里面的 icon图标层负责 rotate滚动
import { CSSTransition } from 'react-transition-group';
<CSSTransition
in={show} // 什么时候添加样式
classNames='cart'
timeout={400} // 动画时长
unmountOnExit // 要销毁,否则层级大于 add按钮
>
<div
className={classnames(styles.decrease)}
onClick={onDecrease}
>
<div className='icon-remove_circle_outline' />
</div>
</CSSTransition>
animate.less
//入场动画
.cart-enter, .cart-exit-done {
opacity: 0;
transform: translate3d(56px, 0, 0);
.icon-remove_circle_outline {
transform: rotate(180deg)
}
}
.cart-enter-active, .cart-exit {
opacity: 1;
transform: translate3d(0, 0, 0);
transition: all 0.4s linear; // 其他 class不需要添加 transition
.icon-remove_circle_outline {
transition: all 0.4s linear;
transform: rotate(0)
}
}
//入场动画执行完成后,这个 class会保留在 div上
.cart-enter-done, .cart-exit {
opacity: 1;
transform: translate3d(0, 0, 0);
.icon-remove_circle_outline {
transform: rotate(0)
}
}
//出场动画,1 出场动画执行的第一个时刻
//.cart-exit {
// opacity: 1;
// transform: translate3d(0, 0, 0);
//}
.cart-exit-active {
opacity: 0;
transform: translate3d(56px, 0, 0);
transition: all 0.4s linear;
.icon-remove_circle_outline {
transform: rotate(180deg);
transition: all 0.4s linear;
}
}
//出场动画执行完成后,这个 class会保留在 div上
//.cart-exit-done {
// opacity: 0;
// transform: translate3d(56px, 0, 0);
//}
CSSTransition
function App() {
const [state, setState] = useState(false)
return (
<CSSTransition
in={state}
timeout={1000}
classNames="fade"
appear
unmountOnExit
onEntered={el => {el.style.color="red"}}
>
<div>item</div>
</CSSTransition>
)
}
入场类
less
.fade-enter {}
.fade-enter-active {}
.fade-enter-done {}
出场类
.fade-exit {}
.fade-exit-active {}
.fade-exit-done {}