TransitionGroup
...2022年5月16日大约 3 分钟
TransitionGroup
<TransitionGroup>
是一个内置组件,设计用于呈现一个列表中的元素或组件的插入、移除和顺序改变的动画效果。
和 <Transition>
的区别
<TransitionGroup>
支持和 <Transition>
基本相同的 prop、CSS 过渡 class 和 JavaScript 钩子监听器,但有以下几点区别:
- 默认情况下,它不会渲染一个包装器元素。但你可以通过传入
tag
属性来指定一个元素作为包装器元素来渲染。 - 过渡模式在这里不可用,因为我们不再是在互斥的元素之间进行切换。
- 其中的元素总是必须有一个独一无二的
key
attribute。 - CSS 过渡 class 会被应用在其中的每一个元素上,而不是这个组的容器上。
进入 / 离开过渡
这里是 <TransitionGroup>
对一个 v-for
列表应用进入 / 离开过渡的示例:
<TransitionGroup name="list" tag="ul">
<li v-for="item in list" :key="item">{{ item }}</li>
</TransitionGroup>
.list-enter-active,
.list-leave-active {
transition: all 0.5s ease;
}
.list-enter-from,
.list-leave-to {
opacity: 0;
transform: translateX(30px);
}
交错的列表过渡
如果通过 data attribute 用 JavaScript 来执行过渡时,那么我们也可以实现列表中的交错过渡。
首先,我们把某一项的索引作为 DOM 元素上的一个 data attribute 呈现出来。
<TransitionGroup
tag="ul"
:css="false"
@before-enter="onBeforeEnter"
@enter="onEnter"
@leave="onLeave"
>
<!-- prettier-ignore-attribute -->
<li v-for="(item, index) in computedList" :key="item.msg" :data-index="index">
{{ item.msg }}
</li>
</TransitionGroup>
接着,在 JavaScript 钩子中,我们基于这个 data attribute 对该元素执行一个延迟动画:
function onEnter(el, done) {
gsap.to(el, {
opacity: 1,
height: '1.6em',
delay: el.dataset.index * 0.15,
onComplete: done,
})
}
你认为这篇文章怎么样?
- 0
- 0
- 0
- 0
- 0
- 0
Powered by Waline v3.3.2