【问题标题】:v-leave-active animation working but v-enter-active animation not working for <transition-group>v-leave-active 动画工作,但 v-enter-active 动画不适用于 <transition-group>
【发布时间】:2021-11-11 12:31:59
【问题描述】:

我正在使用 Vue 3,并且我构建了一个名为 Accordion 的自定义组件。它的功能是在单击按钮时显示和隐藏其中的内容(我使用 div 来制作按钮而不是 &lt;button&gt; 标签)。 Accordion(我的自定义组件)对传入元素使用 &lt;slot&gt;

&lt;slot&gt;&lt;transition-group&gt; 内 手风琴模板看起来像这样

<template>
  <div
    id='accordion'>
    <div
      :id="['accordion', id, 'collapsible-wrapper'].join('-')"
      class="collapsible-wrapper">
      <div
        id='toggle-content'
        :class="(collapsed ? 'icon-plus green flip expand-content-button': 'icon-minus green flip expand-content-button')"
        @click="collapsed = !collapsed">
      </div>
    </div>
    <transition-group name="accordion">
      <slot v-if="!collapsed"></slot>
    </transition-group>
  </div>
</template>

这应该起作用的方式是,当单击“切换内容”div 时,&lt;slot&gt; 中的内容应该在一点动画之后显示,并且当再次单击切换内容 div 时,它应该随着一些动画消失。 现在,当&lt;slot&gt;中的内容消失时,我的动画正在运行,但是在显示内容之前的动画不起作用或由于某种原因没有显示,但我的内容正在显示。

这是我的动画 CSS 代码:

.accordion-enter-active{
  transition: all 0.3s ease-out;
}

.accordion-leave-active {
  transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
}

.accordion-enter-from,
.accordion-leave-to {
  transform: translateX(20px);
  opacity: 0;
} 

这就是我使用 Accordion 组件的方式:

    <Accordion
      :id="1">
      <div class="wrapper1-for-contents">
        <div>
           Some Stuff here
        </div>
        <div>
           Some more stuff here
        </div>
      </div>
      <div class="wrapper2-for-contents">
        <div>
          Some Stuff here
        </div>
        <div>
          Some more stuff here
        </div>
      </div>
   </Accordion>

当我使用&lt;transition&gt; 而不是&lt;transition-group&gt; 时,显示内容之前的动画有效,但并非我的所有内容都显示出来。只有第一个 div(带有 class="wrapper1-for-contents")和它的孩子出现,而我的第二个 div(class="wrapper2-for-contents")和它的孩子没有出现。

我看到了一个类似的问题 here,但该解决方案对我不起作用

我不知道我在这里做错了什么,有人可以帮助我吗?

【问题讨论】:

    标签: javascript vue.js components vuejs3


    【解决方案1】:

    您可以尝试添加mode

    <transition-group name="accordion" mode="out-in">
    

    还有动画:

    .accordion-enter-active,
    .accordion-leave-active {
      transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);
    }
    
    .accordion-enter-active {
      transition-delay: .3s;
    }
    
    .accordion-enter-from,
    .accordion-leave-to {
      transform: translateX(20px);
      opacity: 0;
    } 
    

    【讨论】:

    • 感谢您的回复,但我试过了,但它不起作用。同样的问题仍然存在
    • 现在试试吧,求求你,我更新了答案
    • 再次感谢,我试过了,但同样的问题仍然存在,本应在显示内容之前发生的动画没有发生,内容立即显示,但内容消失时的动画仍然有效
    【解决方案2】:

    尝试将“出现”属性添加到&lt;transition-group&gt; 标记

    &lt;transition-group name="accordion" appear&gt;

    【讨论】:

      【解决方案3】:

      我能够解决这个问题,虽然我不知道为什么它不起作用 当我将手风琴组件的内部(在我设置 id="1" 之前)包裹在一个 div 中时,动画效果很好

      抱歉更新晚了

      【讨论】:

        猜你喜欢
        • 2021-07-25
        • 1970-01-01
        • 2020-06-28
        • 2020-09-05
        • 2020-07-04
        • 1970-01-01
        • 1970-01-01
        • 2017-07-24
        • 1970-01-01
        相关资源
        最近更新 更多