vue.js - Vue transition中v-leave状态求解惑

查看:621
本文介绍了vue.js - Vue transition中v-leave状态求解惑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

vue transition中有6种过渡状态,
从隐藏到显示的过程enter到enter-to,如期地将背景色从红色过渡到了绿色;
但是从显示到隐藏leave到leave-to过渡的背景色却未生效,
并没有能够像我预期的那样从leave的蓝色开始过渡到leave-to的橙色,
求赐教~

<transition name="a">
    <div class="shape" v-show="ifShow"></div>
</transition>

/6种过渡状态/

.a-enter{
    opacity: 0;
    background: red;
    transform: scale(0.2);
}
.a-enter-to{
    opacity: 1;
    background: rgba(34, 172, 56, 1);
}
.a-enter-active{
    transition: all 3s;
}
/*为啥leave的时候不是从蓝色开始过渡的呢?leave好像没有生效*/
.a-leave{
    opacity: 1;
    background: blue;
    transform: rotate(0deg);
}
.a-leave-to{
    opacity: 0;
    transform: rotate(-180deg) translateX(-100px);
    border-radius: 100px;
    background: orange;
}
.a-leave-active{
    transition: all 3s;
}

解决方案

认真测试了一下发现

  • 元素背景为透明,v-enter为红

  1. 元素未display:none 时,触发enter, vue先添加v-enter和v-enter-active再display:block显示出来,此时的元素为红色变成了 v-enter-to的颜色

  • 元素背景为透明,v-leave为蓝色,leave-to为橙色

  1. 元素此时为透明,vue先添加v-leave和v-leave-active,此时就已经开始产生透明到蓝色的过渡效果了(测试了chrome的确是这样处理),在添加v-enter-active,看起来就像是从透明变为橙色

  • 单独的解决办法是添加v-leave后再setTimeout 0添加v-leave-active

这篇关于vue.js - Vue transition中v-leave状态求解惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆