vue 淡入淡出过渡仅在元素离开而不进入时有效

问题描述

我正在尝试学习 Vue.js 并进行基本的淡入淡出。我有一个始终保留在页面上的链接列表。单击链接时,我希望淡入和淡出 div 的可见性。认情况下看不到 div。此 div 包含多个组件。我试图遵循文档。但是,该元素仅在离开时淡出,而在进入时没有任何反应。我已经删除了本文档的多余部分并保留了相关元素。

<template>
   <div class="list">
      <ul>
         <li @click="openWindPoetry">☞ Wind Poetry</li> // button that toggles div show
      </ul>
   </div>
   <div style="width: 97%;" class="project container">
      <transition name="fade" mode="out-in">
         <div v-if="showWP" class="backdrop" @scroll.passive="handleScroll"> // div needed to transition
            <Header theme="WP" header="Wind Poetry" :types="['Interaction','Data Visualisation','2020']"></Header>
            <BodyText theme="WP" heading="ABOUT"
               body="Lorem ipsum dolor sit amet,consectetur adipiscing elit. Aliquam nulla magna,consectetur quis tellus eget,ultricies mattis nisi. Duis dictum dolor in ante placerat,non ultricies dui faucibus. Vivamus lobortis sapien porttitor,molestie urna ut,varius neque. In eu dapibus lectus. Etiam consequat,massa ut consequat lacinia,velit dui molestie dolor,id dapibus sem justo a ante. In pellentesque,odio ut pharetra congue,quam tellus efficitur arcu,non mattis risus nibh ac turpis.">
            </BodyText>
            <div class="introImg">
               <video alt="GIF DEMO" loop autoplay="autoplay" src="./assets/wind/wind_poetry-demo-1.mp4"></video>
            </div>
      </transition>
   </div>
</template>

<script>
export default {
  name: "App",components: {
    Header,Gradient,BodyText
  },data() {
    return {
      title: "LIST OF WORKS",ProjTitle: "Wind Poetry",showWP: false
    };
  },methods: {
    openWindPoetry() {
      (this.title = "BACK TO HOME"),(this.showWP = true),(this.showRec = false);
    }
  }
}
</script>

<style>
#app {
  font-family: "Roboto Mono";
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.fade-enter-active,.fade-leave-active {
  transition: opacity 0.5s ease-out;
}

.fade-enter,.fade-leave-to {
  opacity: 0;
}
</style>

解决方法

在 Vue 3 中,transition class name has changed from -enter to -enter-from,因此您的类应该相应地重命名以允许转换计算正常工作:

/* .fade-enter {/*...*/}  ❌ Vue 2 class name */
.fade-enter-from {/*...*/}

demo