You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue搭配Tailwind实现侧边栏时过渡进入正常但退出动画失效

问题修复方案

核心问题原因

  • 最外层包裹整个弹窗的div绑定了v-show="mobileMenuOpen",触发关闭时根节点直接隐藏,内部过渡组件还没执行离开动画就被销毁,是动画失效的核心原因
  • 遮罩层过渡的leave-class配置错误:离开动画的起始状态应该是完全不透明的opacity-100,你当前配置的opacity-0会导致离开动画起始就完全透明,看不到过渡效果
  • 侧边栏过渡组件未给直接子元素绑定v-show触发条件,也没有闭合标签,无法触发离开过渡

修正后代码

<!-- 移除最外层根div的v-show,把显示条件移到内部过渡的子元素上 -->
<div class="fixed inset-0 flex z-40 lg:hidden" role="dialog" aria-modal="true">
    
    <transition 
      enter-class="opacity-0"
      enter-active-class="transition-opacity ease-linear duration-300" 
      enter-to-class="opacity-100"  
      leave-class="opacity-100" <!-- 修正离开起始状态为不透明 -->
      leave-active-class="transition-opacity ease-linear duration-300" 
      leave-to-class="opacity-0"  
    >
      <div 
        class="fixed inset-0 bg-black bg-opacity-25" 
        aria-hidden="true"  
        v-show="mobileMenuOpen" 
        @click="closeMobileMenu"
      ></div>
    </transition>

    <transition 
      enter-active-class="transition ease-in-out duration-300 transform" 
      enter-class="-translate-x-full"
      enter-to-class="translate-x-0"  
      leave-class="translate-x-0"
      leave-active-class="transition ease-in-out duration-300 transform" 
      leave-to-class="-translate-x-full" 
      appear 
    >
      <!-- 给侧边栏根元素绑定v-show触发过渡 -->
      <div v-show="mobileMenuOpen" class="w-64 bg-white shadow-lg">
        你的侧边栏代码写在这里
      </div>
    </transition>
</div>

注意事项

如果使用的是Vue3,<transition>组件的类名props已经更新,需要把enter-class换成enter-from-class,leave-class换成leave-from-class才能正常生效。

内容的提问来源于stack exchange,提问作者Ali Guzel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:36:09