javascript - 重启 Vue 过渡

标签 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>

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

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);
}

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

最佳答案

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

定义一个参数:

data(){
    return {
        animationTrigger : false
    }
}

标记:

<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>

然后通过像这样更改 animationTrigger 值来运行动画:

animationTrigger = !animationTrigger

找到 there ,还有上面链接在文档中提到的这个用例。

这里是 my example .

关于javascript - 重启 Vue 过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41758797/

相关文章:

javascript - 找不到 angularJS 库

javascript - 如何在 Ektron v9 中使用 JS.RegisterJSInclude()?

javascript - 带有 "OR"语句的动态 img src URL 在 NUXT 组件中无法正常工作

vue.js - 如何将 gtm dataLayer 添加到 nuxt.js 组件?

javascript - 刷新 vue 页面并进行更改

javascript - SetTimeout 重定向不适用于 Firefox

javascript - 修改第三方JS发送的数据

vue.js - vue 和 webpack 不会在组件中进行延迟加载?

javascript - Html5 canvas drawImage 拉伸(stretch)

ruby-on-rails - 在 Vue.js 中使用 ActiveStorage 上传文件