多个元素之间过渡动画效果

多元素之间如何实现过渡动画效果呢?看下面代码

.fade-enter,
.fade-leave-to{opacity: 0;
}
.fade-enter-active,
.fade-leave-active{transition: opacity 3s;
}<div id="root"><transition name="fade"><div v-if="show">hello world</div><div v-else>bye world</div></transition><button @click="handleClick">切换</button>
</div>let vm = new Vue({el: '#root',data: {show: true},methods: {handleClick() {this.show = !this.show}}
})

这么写行不行呢?肯定是不行的,因为 Vue 在两个元素进行切换的时候,会尽量复用dom,就是因为这个原因,导致现在动画效果不会出现。

如果不让 Vue 复用dom的话,应该怎么做呢?只需要给这两个div不同的key值就行了

<div v-if="show" key="hello">hello world</div>
<div v-else key="bye">bye world</div>

这个时候当div元素进行切换的时候,就不会复用了。

mode

Vue 提供了一mode属性,来实现多个元素切换时的效果

mode取值in-out,动画效果是先出现在隐藏

<div id="root"><transition name="fade" mode="in-out">   //第一次点击时,执行顺序为:①②<div v-if="show">hello world</div>  //再消失  ②<div v-else>bye world</div>        //先显示 ①</transition><button @click="handleClick">切换</button>
</div>

mode取值为out-in,动画效果为先隐藏在出现

<div id="root"><transition name="fade" mode="out-in">   //第一次点击时,执行顺序为:①②<div v-if="show">hello world</div>  //先消失  ①<div v-else>bye world</div>        //再显示  ②</transition><button @click="handleClick">切换</button>
</div>

多个组件之间过渡动画效果

这里需要借助动态组件来实现多组件之间过渡动画效果

先用普通的方式来实现切换:

.fade-enter,
.fade-leave-to{opacity: 0;
}
.fade-enter-active,
.fade-leave-active{transition: opacity 1s;
}<div id="root"><transition name="fade" mode="in-out"><child-one v-if="show"></child-one><child-two v-else></child-two></transition><button @click="handleClick">切换</button>
</div>Vue.component('child-one',{template:'<div>child-one</div>'
})
Vue.component('child-two',{template:'<div>child-two</div>'
})
let vm = new Vue({el: '#root',data: {show: true},methods: {handleClick() {this.show = !this.show}}
})

你会发现,这样子实现组件切换,transition动画效果是存在的,但是我们想要用动态组件来实现,该怎么弄呢?

可查看之前的文章:Vue 动态组件与 v-once 指令,这篇文章中详细的介绍了 Vue 的动态组件

列表过渡

这里需要使用一个新标签transition-group来是实现

.fade-enter,
.fade-leave-to{opacity: 0;
}
.fade-enter-active,
.fade-leave-active{transition: opacity 1s;
}<div id="root"><transition-group name="fade"><div v-for="item of list" :key="item.id">{{item.title}}-----{{item.id}}</div></transition-group><button @click="handleClick">添加</button>
</div>let vm = new Vue({el: '#root',data: {count:0,list:[]},methods: {handleClick() {this.list.push({id:this.count ++,title:'hello world'})}}
})

为什么使用了transition-group标签后,就可以出现过渡动画效果了呢?看下面代码:

<transition-group name="fade"><div>hello world</div><div>hello world</div><div>hello world</div>
</transition-group>

在循环过后,页面中会出现一个个div元素,如果你在外面添加一个transition-group的标签,相当于你在每一个div外层都加了一个transition标签,看下面代码

<transition><div>hello world</div>
</transition>
<transition><div>hello world</div>
</transition>
<transition><div>hello world</div>
</transition>

这时候,Vue 把列表的过渡转化为单个的div元素的过渡了,Vue 会在这个元素隐藏或者显示的时候动态的找到时间点,增加对应的class

Vue 中多个元素、组件的过渡,及列表过渡相关推荐

  1. vue中自定义指令、组件化、生命周期、节流和防抖、获取DOM、mint-ui简介、过渡和动画

    自定义指令: vue中通过directive方法自定义指令,如:自定义一个v-focus指令: <script>Vue.directive('focus', {//通过directive( ...

  2. class根据状态 vue_搞懂并学会运用 Vue 中的无状态组件

    啥是应用程序状态,为什么咱们需要它? 状态管理通常在较小的项目并不需要,但是当涉及到更大的范围时,如企业级的应用大部分需要它了.简单的说,状态是一个包含应用程序使用的最新值的对象.但是,如果咱们从结构 ...

  3. 有关QJ_Filecenter在vue中的使用和组件封装

    有关QJ_Filecenter在vue中的使用和组件封装 QJ_FileCenter在vue中的使用和组件封装 安装 第一步:在官网下载QJ_FileCenter安装包 第二部:访问FileCente ...

  4. vue中,右键菜单组件v-contextmenu的使用

    vue中,右键菜单组件v-contextmenu的使用 1.效果 右键菜单之禁用和子菜单 2.流程 第一步:安包 npm install v-contextmenu --save-dev npm in ...

  5. [vue] vue中什么是递归组件?举个例子说明下?

    [vue] vue中什么是递归组件?举个例子说明下? 组件自己调用自己,场景有用于生成树形结构菜单 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主 ...

  6. vue中集成的ui组件库_Vue组件可使用Vault Flow通过Braintree集成PayPal付款

    vue中集成的ui组件库 Vue Braintree PayPal按钮 (Vue Braintree PayPal button) Vue component to integrate PayPal ...

  7. vue中怎么获取元素

    vue中怎么获取元素 在元素上添加 v-el:food-wrapper (不用驼峰的写法) vue1版本 报错: vue2版本 (vue2把vue1中的 v-el 改为了 ref vue1 v-el: ...

  8. Vue中获取dom元素的宽高

    vue中获取dom元素的宽高 template模板中给dom绑定ref: <el-carouselid="ailabelmap"ref="remarkCarusel ...

  9. vue中删除数组元素

    vue中删除数组元素 let arr = [{ name: 'aa',id: 11},{name: 'bb',id: 12} ] 1.filter arr = arr.filter(t => t ...

  10. Vue中如何扩展⼀个组件

    Vue中如何扩展⼀个组件 按照逻辑扩展和内容扩展来列举: 逻辑扩展有:mixins.extends.composition api: 内容扩展有: slots: 一.Mixin 组件和组件之间有时候会 ...

最新文章

  1. 收藏!中国卫星互联网产业发展白皮书
  2. 介绍一款开源的类Excel电子表格软件
  3. linux下apache服务器的配置和管理(启动、重启、中断服务)
  4. Linux cmake使用入门
  5. Python之路--Django--form组件与model form组件
  6. 根号三的用计算机怎么表示,计算器根号3怎么打
  7. yum错误---Running Transaction
  8. linux安装mysql(shell一键安装)
  9. linux 火锅平台,“定制版火锅”来袭,持续创新才能永葆活力
  10. 使用PostgREST构建PostgreSQL数据库的REST风格API
  11. QT中串口通信程序(转)
  12. 人脸识别FAR值重新认识
  13. 真假难辨,AI就能分得清?
  14. 小腿抽筋了,按摩承山穴,外加念观世音菩萨是不是迷信
  15. imageai的安装和简单使用
  16. GOOGLE:单一模式背后
  17. 小程序 - canvas绘制海报
  18. Java不要在循环中访问数据库,这样会严重影响数据库性能
  19. 【有效】vscode中markdown导出pdf报错解决: ERROR: Navigation Timeout Exceeded: 30000 ms exceeded
  20. 新日+苏宁O2O,电动车市迎来智慧零售新时代

热门文章

  1. 苹果连接电脑只能充电_苹果获得MagSafe式充电技术专利 可自动连接充电
  2. ​脑机技术可以应用于军事领域,有助于评估士兵的认知状态
  3. Go web之旅(路由篇)
  4. 英伟达3080Ti、3070Ti来了:继续封锁挖矿性能,网友:不信,空气卡+1
  5. 马斯克很着急:加速打造“月球电梯”,他要从NASA手中抢到这一单
  6. 这张“毅力号火星照片”,AI P过
  7. 像git一样使用AI数据集!免费数据托管工具上线,让模型用「活」的数据集训练...
  8. 湖大深大A级学科数超南开,华科文科胜过武大!泰晤士的首份高校评级结果,让人有点方...
  9. LeCun自曝使用C语言23年之久,2年前才上手Python,还曾短暂尝试Lua
  10. 首个镜子分割网络问世,大连理工、鹏城实验室、香港城大出品 | ICCV 2019