React动画实践
一、 动画重要性
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
var
ReactCSSTransitionGroup
=
React
.
addons
.
CSSTransitionGroup
;
var
Carousel
=
React
.
createClass
(
{
propTypes
:
{
transitionName
:
React
.
PropTypes
.
string
.
isRequired
,
imageSrc
:
React
.
PropTypes
.
string
.
isRequired
}
,
render
:
function
(
)
{
return
(
<
div
className
=
'carousel'
>
<
ReactCSSTransitionGroup
transitionName
=
{
this
.
props
.
transitionName
}
>
<
img
src
=
{
this
.
props
.
imageSrc
}
key
=
{
this
.
props
.
imageSrc
}
/
>
<
/
ReactCSSTransitionGroup
>
<
/
div
>
)
;
}
}
)
;
|
剩下的就是在父组件中为其传入合适的transitionName以及imageSrc即可。效果如下:
聪明的你一定发现了:在这个组件当中,当一个新的列表项被添加到ReactCSSTransitionGroup,它将会被添加transitionName-enter对应的css类,然后在下一时刻被添加transitionName-enter-active 对应的CSS类;当一个列表项要从ReactCSSTransitionGroup中移除时,他也将会被添加transitionName-leave对应的css类,然后在下一时刻被添加transitionName-leave-active 对应的CSS类,这里要注意的是,当你尝试移除一项的时候,ReactCSSTransitionGroup仍会保持该项在DOM里,直至动画结束;
示例中演示的两个切换效果只需要修改transitionName属性对应的CSS动画类即可:
透明度切换效果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
.
carousel1
-
enter
{
opacity
:
0
;
}
.
carousel1
-
enter
-
active
{
opacity
:
1
;
transition
:
opacity
300ms
ease
-
in
;
}
.
carousel1
-
leave
{
opacity
:
1
;
}
.
carousel1
-
leave
-
active
{
opacity
:
0
;
transition
:
opacity
300ms
ease
-
in
;
}
|
位移切换效果:
.
carousel2
-
enter
{
left
:
100
%
;
}
.
carousel2
-
enter
-
active
{
left
:
0
;
transition
:
left
300ms
ease
-
in
;
}
.
carousel2
-
leave
{
left
:
0
;
}
.
carousel2
-
leave
-
active
{
left
:
-
100
%
;
transition
:
left
300ms
ease
-
in
;
}
|
- 大家都注意到了,我一直在提transitionName这个属性,其实对于ReactCSStransitionGroup来说,一个属性是完全不够的,下面来详细介绍下它的属性们。
-
2、属性们
-
(1)、transitionName
{oneOfType([React.PropTypes.string,React.PropTypes.object]).isRequired}
作用:关联CSS类:
例如:
1
2
3
4
5
6
|
transitionName
-
appear
;
transitionName
-
appear
-
active
;
transitionName
-
enter
;
transitionName
-
enter
-
active
;
transitionName
-
leave
;
transitionName
-
leave
-
active
;
|
制定CSS类:
1
2
3
4
5
6
7
8
|
transitionName
=
{
{
enter
:
‘
enter’
,
enterActive
:
‘
enterActive’
,
leave
:
‘
leave’
,
leaveActive
:
‘
leaveActive’
,
appear
:
‘
appear’
,
appearActive
:
‘
appearActive’
}
}
|
(2)、transitionAppear
{React.PropTypes.bool} {false}
作用:初始化挂载动画。来为在组件初始挂载添加一个额外的过渡阶段。 通常在初始化挂载时没有过渡阶段因为transitionAppear 的默认值为false。
(3)、transitionEnter
{React.PropTypes.bool} {true}
作用:用来禁用 enter动画
(4)、transitionLeave
作用:用来禁止leave动画 ReactCSSTransitionGroup 会在移除你的DOM节点之前等待一个动画完成。你可以添加transitionLeave={false} 到ReactCSSTransitionGroup 来禁用这些动画。
(5)、component
{React.PropTypes.any} {‘span’}
作用:默认情况下 ReactTransitionGroup 渲染为一个 span。你可以通过提供一个 component prop 来改变这种行为. 组件不需要是一个DOM组件,它可以是任何你想要的React组件,甚至是你自己写的。
(6)、className
{ React.PropTypes.string }
作用:给当前的component设置样式类