重新启动 Vue 过渡

Mik*_*kko 1 javascript vue.js

我在Vue中定义了一个过渡组

<transition-group
        name="staggered-scale"
        tag="div"
        :css="false"
        @before-enter="animationBeforeEnter"
        @enter="animationEnter"
        appear>
    <span v-for="i in range" :key="i" :data-index="i">{{ i }}</span>
</transition-group>
Run Code Online (Sandbox Code Playgroud)

我有一些控制动画的 Javascript 钩子。

animationBeforeEnter(el) {
  el.style.transform = 'scale(0.1)';
}

animationEnter(el, done) {
  const delay = el.dataset.index * 30;
  setTimeout(() => {
    el.style.transform = 'scale(1.0)';
    done();
  }, delay);
}
Run Code Online (Sandbox Code Playgroud)

当组件最初渲染时,动画播放得很好。但是,我可以通过编程方式触发动画再次运行吗?

Pan*_*het 5

您可以将参数绑定到:keya 的特殊属性transition-group,每次参数值更改都会导致重新渲染,动画将再次运行。

定义一个参数:

data(){
    return {
        animationTrigger : false
    }
}
Run Code Online (Sandbox Code Playgroud)

标记:

<transition-group
        name="staggered-scale"
        tag="div"
        :key="animationTrigger"
        :css="false"
        @before-enter="animationBeforeEnter"
        @enter="animationEnter"
        appear>

    <span 
        v-for="i in range" 
        :key="i"
        :data-index="i">
        {{ i }}
    </span>

</transition-group>
Run Code Online (Sandbox Code Playgroud)

然后通过更改animationTrigger值来运行动画,如下所示:

animationTrigger = !animationTrigger
Run Code Online (Sandbox Code Playgroud)

在那里找到了,而且在上面的链接的文档中也提到了这个用例。

这是我的例子