【问题标题】:Possible to add more than one vue transition effects on the same element可以在同一个元素上添加多个 vue 过渡效果
【发布时间】:2021-06-10 11:44:18
【问题描述】:

我有两个按钮,单击一个按钮时我需要制作元素滑动 vue 过渡效果,单击另一个按钮时我需要制作元素淡入淡出 vue 过渡效果。


<template>
    <transition :name="transition ? 'slide-fade' : 'fade'">
        <p>Hello world</p>
    </transition>
    <button @click="shouldSlide">Slide</button>
    <button @click="shouldFade">Fade</button>
<template>

<script>
export default {
    data () {
        return {
            isSlide: false
        }
    },
    computed: {
        transition () {
            return this.isSlide
        }
    },
    methods: {
        shouldSlide () {
            this.isSlide = true
        },
        shouldFade () {
            this.isSlide = false
        }
    }
}
</script>

我知道它不会起作用,因为计算发生在模板更新之后。有没有其他方法可以解决这个问题。提前致谢。

【问题讨论】:

    标签: javascript vue.js vuejs2 vue-transitions


    【解决方案1】:

    您的代码似乎是正确的。您缺少 v-if 或 v-show 来触发转换

    new Vue({
      el: "#aa",
      data() {
        return {
          isSlide: false,
          show: false,
        }
      },
      computed: {
        transition() {
          return this.isSlide
        }
      },
      methods: {
        shouldSlide() {
          this.isSlide = true
          this.show = false;
          setTimeout(() => {
            this.show = true;      
          }, 0)
        },
        shouldFade() {
          this.isSlide = false
          this.show = false;
          setTimeout(() => {
            this.show = true;      
          }, 0)
        }
      }
    })
    .slide-leave-active,
    .slide-enter-active {
      transition: 1s;
    }
    .slide-enter {
      transform: translate(100%, 0);
    }
    .slide-leave-to {
      transform: translate(-100%, 0);
    }
    
    .fade-leave-active,
    .fade-enter-active {
      transition: 1s;
    }
    .fade-enter {
      opacity: 0;
    }
    .fade-leave-to {
      opacity: 0;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    
    <main id="aa">
      <transition :name="transition ? 'slide' : 'fade'">
        <p v-if="show">Hello world</p>
      </transition>
      <button @click="shouldSlide">Slide</button>
      <button @click="shouldFade">Fade</button>
    <main>

    【讨论】:

    • 太棒了,不知道这个。谢谢老兄。
    • 参考文档,short answer is no,除非它是动态组件或根元素。您总是可以通过添加/删除类来使用正常的 css 转换。您可以将其添加到动态类中,而不是 name 属性上的三元条件::class="[transition ? 'slide' : 'fade']"
    猜你喜欢
    • 2013-05-08
    • 2012-01-06
    • 2017-01-15
    • 2021-02-05
    • 2011-10-26
    • 2021-06-30
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多