用 vue 实现的动画,为什么却不按照预期来运行(已经添加了.fade-leave 类,但貌似不生效) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
manyfreebug
V2EX    Vue.js

用 vue 实现的动画,为什么却不按照预期来运行(已经添加了.fade-leave 类,但貌似不生效)

  •  
  •   manyfreebug 2019-07-24 23:04:41 +08:00 2817 次点击
    这是一个创建于 2337 天前的主题,其中的信息可能已经有所发展或是发生改变。
    运行效果也可在这查看: https://jsbin.com/leyeyureki/edit?html,css,js,output 
     对这段代码的预期是: (1)在未触发动画前,.box 的 opacity 的初始值是 0.3 ; (2)在点击切换按钮时(使 show 变为 false),离开过渡动画被触发,css 中 opacity 的 值先变成 1,然后经过 3s 后,opacity 的值变成 0。 问题在于:当点击切换按钮时,貌似.fade-leave 这个类并没有生效。 我不是已经在 css 中添加了.fade-leave 这个类了吗? 但为什么点击切换时,它并没有将 opacity 的值首先变成 1. .fade-leave 这个类不是在离开过渡被触发时会立刻生效吗? 
    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" cOntent="width=device-width"> <title>JS Bin</title> <script src="https://cdn.jsdelivr.net/npm/vue"></script> </head> <body> <div id="app"> <input type="button" value="切换" v-on:click="handleClick"> <transition name="fade"> <div class="box" v-if="show">hello world</div> </transition> </div> </body> </html> 
    .box { /* .box 的初始值 */ opacity: 0.3; } /* 对这段代码的预期是: (1)在未触发动画前,.box 的 opacity 的初始值是 0.3 ; (2)在点击切换按钮时(使 show 变为 false),离开过渡动画被触发,css 中 opacity 的 值先变成 1,然后经过 3s 后,opacity 的值变成 0。 问题在于:当点击切换按钮时,貌似.fade-leave 这个类并没有生效。 我不是已经在 css 中添加了.fade-leave 这个类了吗? 但为什么点击切换时,它并没有将 opacity 的值首先变成 1. .fade-leave 这个类不是在离开过渡被触发时会立刻生效吗? */ .fade-leave { opacity: 1; } .fade-leave-active { transition: opacity 3s; } .fade-leave-to { opacity: 0; } 
    var vm = new Vue({ el: "#app", data: { show: true }, methods: { handleClick: function() { this.show = !this.show; } } }) 
    4 条回复    2019-07-25 16:41:46 +08:00
    liyang5945
        1
    liyang5945  
       2019-07-25 08:48:40 +08:00
    v-if 不是这么用的,v-if 的意思是否渲染出来这个元素,一开始 show 是 true,你再把 show 改成 false 也没用的,应该用 v-show,v-show 的作用才是显示隐藏
    Kei
        2
    Kei  
       2019-07-25 09:09:53 +08:00
    > 离开过渡动画被触发,css 中 opacity 的值先变成 1,然后经过 3s 后,opacity 的值变成 0。

    并没有说明 opacity 0.3 -> 1 的动画时间
    mozhizhu
        3
    mozhizhu  
       2019-07-25 09:11:34 +08:00
    请认真看官方示例(哪怕是原封不动的复制下来运行一次);
    例如你的过渡类名设定的“ fade";
    涉及到的自动关联类名.fade-enter-active,.fade-leave-active,.fade-enter,.fade-leave-to;
    显然,你并没有搞明白这一点。
    manyfreebug
        4
    manyfreebug  
    OP
       2019-07-25 16:41:46 +08:00
    @mozhizhu 官方文档中不是说有 6 个 class 的切换吗?其中也包括了.fade-leave 啊
    <a href="https://cn.vuejs.org/v2/guide/transitions.html#%E8%BF%87%E6%B8%A1%E7%9A%84%E7%B1%BB%E5%90%8D">在进入 /离开的过渡中,会有 6 个 class 切换</a>
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1417 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:49 PVG 00:49 LAX 08:49 JFK 11:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86