const vnode = {
tag: 'DIV',
attrs: {
id: 'app'
},
children: [{
tag: 'SPAN',
children: [{
tag: 'A',
children: []
}]
},
{
tag: 'SPAN',
children: [{
tag: 'A',
children: []
},
{
tag: 'A',
children: []
}
]
}
]
}
function render(vnode) {
}
在 CSS3 中,transition
和 animation
是两种用于实现动画效果的属性。它们分别用于不同的动画需求和实现方式。
Transition 属性:
transition
属性用于定义元素在状态改变时从一个样式转换到另一个样式的过渡效果。它包含以下几个属性:
transition-property
:指定过渡效果应用的 CSS 属性名称,多个属性可以用逗号分隔。
transition-duration
:指定过渡效果的持续时间,单位可以是秒(s)或毫秒(ms)。
transition-timing-function
:指定过渡效果的时间曲线,也就是过渡的速度变化函数。
transition-delay
:指定过渡效果开始之前的延迟时间,单位可以是秒(s)或毫秒(ms)。
示例:
/* 定义一个简单的过渡效果 */
.box {
width: 100px;
height: 100px;
background-color: red;
transition: width 1s ease-in-out;
}
.box:hover {
width: 200px;
}
在上面的示例中,当鼠标悬停在 .box
元素上时,宽度从 100px 过渡到 200px,过渡持续时间为 1 秒,过渡速度为 ease-in-out。
Animation 属性:
animation
属性用于定义复杂的动画效果,可以自定义关键帧(keyframes)来实现更复杂的动画效果。它包含以下几个属性:
animation-name
:指定定义动画的关键帧名称。
animation-duration
:指定动画的持续时间,单位可以是秒(s)或毫秒(ms)。
animation-timing-function
:指定动画的时间曲线,也就是动画的速度变化函数。
animation-delay
:指定动画开始之前的延迟时间,单位可以是秒(s)或毫秒(ms)。
animation-iteration-count
:指定动画的重复次数,可以使用一个整数值或 infinite
(表示无限循环)。
animation-direction
:指定动画的播放方向,可以是 normal
(默认),reverse
(反向播放),alternate
(正向再反向循环),或 alternate-reverse
(反向再正向循环)。
animation-fill-mode
:指定动画在非运行时的样式,可以是 none
(默认),forwards
(保持最后一帧的样式),backwards
(应用第一帧的样式),或 both
(同时应用第一帧和最后一帧的样式)。
animation-play-state
:指定动画的播放状态,可以是 running
(默认,动画正在播放)或 paused
(动画暂停)。
示例:
/* 定义一个简单的动画 */
@keyframes slide-in {
0% {
transform: translateX(-100%);
}
100% {
transform: translateX(0);
}
}
.box {
width: 100px;
height: 100px;
background-color: red;
animation: slide-in 1s ease-in-out infinite alternate;
}
在上面的示例中,.box
元素会应用一个名为 slide-in
的动画,从左侧滑动进入容器,动画持续时间为 1 秒,以 ease-in-out 时间曲线播放,无限循环,并且往返运动。