Vue多元素过渡
Posted cowboybusy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue多元素过渡相关的知识,希望对你有一定的参考价值。
- transition包含v-if v-else显示和隐藏元素的时候,两个元素同时发生过渡
<style>
.fade-enter,.fade-leave-toopacity:0;
.fade-enter-active,.fade-leave-activetransition:opacity .5s;
</style>
<div id="demo">
<button @click="clear">清空数据</button>
<button @click="reset">重置</button>
<transition name="fade">
<ul v-if="items.length > 0">
<li v-for="item in items">item</li>
</ul>
<p v-else>Sorry, no items found.</p>
</transition>
</div>
<script>
new Vue(
el: '#demo',
data:
items: ['html','css','js']
,
methods:
clear()
this.items.splice(0);
,
reset()
history.go();
)
</script>
清空列表的时候,列表逐渐消失,同时文字逐渐出现,文字先放在列表后面,列表0.5s后完全消失,文字瞬间上移到列表之前的位置
- 如果transition里面包裹的是相同标签名的元素切换时,Vue 为了效率只会替换相同标签内部的内容
<div id="demo">
<button @click="show = !show">toggle</button>
<transition name="fade">
<p v-if="show">我是小火柴</p>
<p v-else>我不是小火柴</p>
</transition>
</div>
<style>
.fade-enter,.fade-leave-toopacity:0;
.fade-enter-active,.fade-leave-activetransition:opacity .5s;
</style>
这样切换不会有任何过渡,可以通过绑定一个key来区分相同的标签解决这个问题
<div id="demo">
<button @click="show = !show">toggle</button>
<transition name="fade">
<p v-if="show" key="trueMatch">我是小火柴</p>
<p v-else key="falseMatch">我不是小火柴</p>
</transition>
</div>
- 可以给通过给同一个元素设置不同的key来代替 v-if 和 v-else
<transition>
<button v-if="isEditing" key="save">Save</button>
<button v-else key="edit">Edit</button>
</transition>
<transition>
<button v-bind:key="isEditing">
isEditing ? 'Save' : 'Edit'
</button>
</transition>
过渡的时候,它们两个效果一样
- 默认情况下,多元素过渡是多个元素同时过渡,可以通过设置过渡模式来达到分开过渡
- in-out: 新元素先进行过渡,完成之后当前元素过渡离开。
- out-in: 当前元素先进行过渡,完成之后新元素过渡进入。
<div id="demo">
<transition name="fade" mode="out-in">
<button :key="isOn" @click="isOn = !isOn"> isOn ? 'On' : 'Off' </button>
</transition>
</div>
- 可以设置绝对布局,使过渡的两个元素互相重叠,这样可以在同一个位置过渡,避免出现隐藏的元素过渡完成后,显示的元素瞬间移动到隐藏元素位置的情况
<style>
#demoposition:relative;
#demo buttonposition:absolute;left:40px;
.fade-enter,.fade-leave-toopacity:0;
.fade-enter-active,.fade-leave-activetransition: 1s;
</style>
<div id="demo">
<transition name="fade" >
<button :key="isOn" @click="isOn = !isOn"> isOn ? 'On' : 'Off' </button>
</transition>
</div>
- 多个组件切换过渡,不需要使用key
<div id="demo">
<transition name="fade" >
<button :key="isOn" @click="isOn = !isOn"> isOn ? 'On' : 'Off' </button>
</transition>
</div>
<div id="example">
<button @click="change">切换页面</button>
<transition name="fade" mode="out-in">
<component :is="currentView"></component>
</transition>
</div>
<script>
new Vue(
el: '#example',
data:
index:0,
arr:[
template:`<div>ComponentA</div>`,
template:`<div>ComponentB</div>`,
template:`<div>ComponentC</div>`
],
,
computed:
currentView()
return this.arr[this.index];
,
methods:
change()
this.index = (++this.index)%3;
)
</script>
- 效果图参考:
https://www.cnblogs.com/xiaohuochai/p/7411864.html
以上是关于Vue多元素过渡的主要内容,如果未能解决你的问题,请参考以下文章