Vue系列连载又继续了,公众号和微信号都接到了伙伴们的催更,最近忙于工作,没来得及时更新《Vue2.0进阶》的教程文章,大家久等了。

这一节我们来学习如何利用Vue提供的transition组件实现一些过渡效果,同时利用上一节《Vue开发调试神器Vue-devtools》来帮助我们调试,这也是为什么要先学习Vue-devtools的原因。

实现过渡的动画效果已经不是什么稀奇的事,是每一个前端开发者都要必备的技能。在不依赖第三方框架的库的前提下,实现动画最简单的办法就是使用CSS3给我们提供的属性。这一节,我们将会使用CSS3的transition属性来实现我们的想要的效果。

如果还没了解CSS3的transition属性的小伙伴可以事先去了解一下,如果一时半会实在没条件(正在挤地铁呢)去查阅transition属性,可以继续往下看,前端君会穿插着讲一些transition属性的内容。

除了CSS3的transition属性,Vue提供的组件也叫transition,可别混淆了,它们是两个不同的东西,仅仅是长得一样罢了。

<transition/>组件

<transition/> 组件的写法:

<transition name="box"></transition>

我们会给 <transition/> 组件添加一个属性name,我们取名为box。

然后呢,然后怎样才会有动画效果呢, <transition/> 组件什么时候才能起作用呢?

<transition/>起作用

Vue提供的 <transition/> 组件,会在下列四种情况下起作用:

    1. 条件渲染(使用v-if)

    2. 条件展示(使用了v-show)

    3. 动态组件

4. 组件根节点

在上述的任意一种情况发生的时候(比如:v-show的值为true切换成false的时候),我们可以给 <transition/> 组件包含的节点元素添加entering/leaving过渡动画效果。

那我们如何添加我们想要的过渡效果呢?

过渡原理分析

原来,当一个被 <transition/> 组件包含的节点出现了以上的4种情况的任意一种的时候,Vue自动嗅探目标元素是否应用了 CSS 过渡或动画,如果是,在恰当的时机添加/删除 CSS 类名。

所谓的:“在恰当的时机添加/删除 CSS 类名”,其实是:

1.v-enter:进入过渡效果(enter)刚刚开始那一刻。在元素被插入或者show的时候生效,在下一个帧就会立刻移除,一瞬间的事。

2.v-enter-active: 表示进入过渡(entering)的结束状态。在元素被插入时生效,在 transition/animation 完成之后移除。

3.v-leave: 离开过渡(leave)的开始那一刻。在离开过渡被触发时生效,在下一个帧移除,也是一瞬间的事。

4.v-leave-active:离开过渡(leaving)的结束状态。在离开过渡被触发时生效,在 transition/animation 完成之后移除。

看文字看不懂没关系,用图来解释可能会直观一点。

假设一个被 <transition/> 组件包含的节点从隐藏到显示(称之为进入过渡),它会被依次添加一些类class,如图:

反之,如果是从显示到隐藏(称之为离开过渡),它会被依次添加一些类class,如图:

注意:.v-enter中的v-只是前缀,如果我们 <transition/> 组件的name值为box,那么它实际的class为 .box-enter。

既然Vue给我们提供了这些class类,我们就可以编写这些class的内容来实现我们想要的过渡效果了。

实战小案例

讲到这里,似乎还似懂非懂,总感觉理解的不是很透彻,当然,还没动手敲一遍,怎么会透彻,那接下来我们再来一个例子演示一遍。

我们先来看看要实现的案例效果(如下图),再一步一步来实现它。

(我是gif,加载有点慢)

首先,先引入我们的vue.js文件,这里就不演示了。

我们先用html布局:



 <div id="app" class="app">    <button class="btn">切换</button>    <div class="container">        <div class="box"></div>    </div> </div>

Javascript部分:



 <script>    const app = new Vue({        el:"#app",        data:{            showBox:false        }    }); </script>

相信学过《Vue2.0基础系列》的同学看上面这两段代码应该是毫无压力了。CSS样式布局就不展示,无非是定义各个节点的宽高颜色罢了。

上面data中的showBox的值默认是为fasle,我们来修改代码,实现点击切换box节点的显示/隐藏。

代码稍做修改:



 <button         @click="showBox = !showBox"         class="btn">    切换 </button>

给 <button/> 组件添加vue的点击事件处理程序,每次点击“切换”按钮的时候将showBox的值取反,就能实现box元素的显示/隐藏,非常好理解。

我们顺便打开开发者工具,找到Vue面板:

我们来看看切换的效果:

(我是gif,加载有点慢)

通过 Vue调试面板我们可以看到,当我们不断点击的时候,showBox的值不断的取反,而页面的效果也是在我们的预料之中,box元素节点不断在显示和隐藏之间切换。但是,box节点只是简单生硬的切换隐藏/显示,并没有任何过渡效果。

当然啦,因为最重要的 <transition/> 组件我们还没用上呢?

接着我们再修改代码:



 <transition name="box">    <div v-show="showBox" class="box">        i am the box    </div> </transition>

我们看到,原来的box节点元素,现在嵌套在了 <transition/> 组件的内部,并且name属性的值为box。当我们的showBox再取反的时候,Vue就会在适当的时候添加相应的class类名了。

比如,当它进入过渡的时候(隐藏→显示),就会依次发生:

1. 添加.box-enter

2.  删除.box-enter,添加 .box-enter-active

3.  删除.box-enter-active

当它离开过渡的时候(显示→隐藏),就会依次发生:

1. 添加.box-leave

2. 删除.box- leave,添加 .box- leave-active

3. 删除.box- leave -active

有了这些class,我们就可以根据自己的需要,给它们添加内容。



 /*box节点本身的样式*/ .box{    width:100%;    height:100%;    text-align: center;    line-height: 200px;    background: #ff8282;    color: #Fff;    /*以下两个默认值,可不写*/    /*写上只是为了便于讲解,记住这两个*/    opacity: 1;    margin-left: 0; }

提示:这是box节点原本的样式,最后两个CSS属性的是都是默认值,写出来是为了便于后面的理解。

我们需要定义进入和离开过渡动画效果,这里用到了CSS3的transition属性。



 .box-enter-active,.box-leave-active{    transition: all .8s; }

这里的transition表示 box节点所有属性的变化都会运用此过渡效果过渡时间为0.8秒,是CSS3中transition属性的知识。

然后我们再设置进入过渡(entering)的样式,因为我们想要的效果是box节点从右往左滑动进入,并且透明度由浅到深,所以一开始那一刻的样式设置为:



 .box-enter{    opacity: 0;    margin-left: 100%; }

当进入下一帧的时候,.box-enter立刻被删除,opactity的值由0变成上面定义的默认值:1,margin-left的值由100%变成上面定义的默认值:0,与此同时也添加了.box-enter-active,正因为.box-enter-active里面的transition属性定义了过渡效果,所以,属性的变化达到了慢慢过渡的效果。

而离开过渡(leaving)的时候,是从左到右滑动离开的,并且透明度也是由深到浅,直到透明。所以离开过渡一开始那一刻的样式和默认样式一样,我们无需重复定义。

而离开过渡(leaving)最后的一刻的样式是:



 .box-leave-active{    opacity: 0;    margin-left: 100%; }

.box-enter的样式一样,进入那一刻从右边进场,最后离开完成那一刻,回到了右边。(从哪里来,会哪里去)

最后我们看看效果,是不是我们想要的:

(我是gif,加载有点慢)

完美,成功地运用Vue给开发者提供的 <transition/> 组件实现了过渡效果。

本节总结

理解Vue的  <transition/>  组件 ,配合CSS3的动画知识,就能随心所欲地写出你想要的效果。

推荐

扩展阅读

1.《ECMAScript 6 系列》原创教程

2.《Vue2.0基础系列》原创教程

3.《ECMAScript 6 系列》的 2 套习题

4.《Vue2.0基础系列》的 1 套习题

关于职场

感悟:混口饭吃,谈不上喜欢

薪资:关于昨天的招聘薪资问题

郑州招聘:招聘前端3~5人

广州招聘:招聘前端2人

资源推荐

其实学好技术并不难,架构师免费分享全网全套最新web前端、JavaScript、HTML5、PHP、数据库……等视频资料!

[总价值超3万!]年薪35万以上的大牛几乎都看了!

加微信: abc15689892 免费领取,由于领取的朋友比较多,所以加微信时一定要备注:555,否则很难通过。

【vue2.0进阶篇】用transition组件轻松实现过渡效果相关推荐

  1. 【vue2.0进阶】vue-router10分钟快速入门

    又一周过去了,时间过得很快,更新不能落下,继续我们的vue2.0进阶教程.今天前端君来跟大家一起快速入门vue-router. 学一个新东西之前,我们一定先要学会问:它有什么作用,为什么要学它? 对于 ...

  2. 《微信小程序-进阶篇》Lin-ui组件库源码分析-列表组件List(一)

    大家好,这是小程序系列的第二十篇文章,在这一个阶段,我们的目标是 由简单入手,逐渐的可以较为深入的了解组件化开发,从本文开始,将记录分享lin-ui的源码分析,期望通过对lin-ui源码的学习能加深组 ...

  3. vue2.0+stylus实现星级评定组件,computed计算属性实现全星半星,动态改变星级,多种星星规格

    vue2.0+stylus实现星级评定组件,computed计算属性实现全星半星,多种星星规格 使用方法如下:(size为星星的大小,score为评分,比如传4.5,则4.5颗星亮:传4.1则四颗星亮 ...

  4. Vue2.0 的 Material Design UI 组件库 Muse-UI

    Muse-UI 基于 Vue2.0 的 Material Design UI 组件库 安装 npm install muse-ui --save 使用 import Vue from 'vue' im ...

  5. graphpad prism8教程柱状图_一起来看看Graphpad Prism 8.0进阶篇吧!

    原标题:一起来看看Graphpad Prism 8.0进阶篇吧! 下载了GraphPad Prism 8后,迫不及待的体验了一下小提琴图.之前使用传统的柱状图遭遇过的坑,这次一定要一个个爬出来. 以前 ...

  6. 【vue2.0进阶】轻松理解Vuex的3个核心概念及简单应用案例(计算器)

    Vuex是一个提供状态管理机制,相比使用传统的全局对象,它有两大优点,一个是它的状态存储是响应式的,另一个是要不能随意修改Vuex的状态,必须按照它的规矩来办事.最后也了解了它有适用和不适用的业务场景 ...

  7. 【vue2.0进阶】轻松理解Vuex的3个核心概念

    上一节前端君和大家一起认识了Vuex,我们了解了Vuex是一个提供状态管理机制,相比使用传统的全局对象,它有两大优点,一个是它的状态存储是响应式的,另一个是要不能随意修改Vuex的状态,必须按照它的规 ...

  8. 【vue2.0进阶】用axios来实现数据请求,简单易用

    写了几期的黑话<互联网公司黑话大全>,有个同学问vue2.0的进阶篇算更新完了吗? 让我猛地想起进阶篇在推出预告的时候,大家都提醒前端君,vue-resource已经停止更新了,现在都推荐 ...

  9. 【vue2.0进阶】案例:用Vuex实现一个简单的计算器

    昨天我们学习了Veux的几个重要的核心概念.当然只讲概念还不够,必须要结合上案例才能理解得更深刻. 马上就开始我们今天的案例:用Vuex实现一个简单的网页计算器. 我们之前的章节说过,Vuex适合在较 ...

最新文章

  1. elgamal java_ElGamal - 源码下载|系统编程|加密解密|源代码 - 源码中国
  2. 使用nfs映射远程服务器磁盘目录
  3. python模拟浏览器请求的库_基于Python模拟浏览器发送http请求
  4. python安装mysqldb模块_python MysqlDb模块安装及其使用详解
  5. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第1天
  6. python爬取b站403_使用Python爬取B站全站视频信息
  7. 软件测试基础概念(二)测试环
  8. APP推广渠道分析:5种方法和2种思路
  9. 毕业设计——基于STM32单片机的蓝牙智能手环系统
  10. Jekyll+GitHub搭建个人博客
  11. chrome浏览器 各个版本下载地址
  12. 浏览器被万恶的hao123锁定主页
  13. linux中md5sum命令使用
  14. 不带符号的阵列乘法器_阵列乘法器.ppt
  15. 图像处理之_傅立叶变换
  16. 2022开年第一个爆款凭什么是山东蓝翔?如何实现破圈传播?
  17. FabricJS gotchas/FabricJS陷阱
  18. java计算机毕业设计智慧农业水果销售系统MyBatis+系统+LW文档+源码+调试部署
  19. android开发微信交流群
  20. 什么是基础设施建设?

热门文章

  1. 2020新电商营销白皮书
  2. 设计链表(Leetcode第707题)
  3. python登录系统文件版_详解用python实现基本的学生管理系统(文件存储版)(python3)...
  4. 谷歌浏览器安卓_谷歌终于动手了,安卓将在国内收费,免费的午餐到头了!
  5. 界面设计方法 (1) — 5. 表单功能的设计
  6. 编译原理——实验叁——基于YACC的TINY语法分析器的构建
  7. RabbitMq 发布订阅 Publish/Subscribe fanout/direct
  8. 选举学生会(洛谷P1271题题解,Java/C++语言描述)
  9. 【分享】搭建域环境实现主域和文件服务器的热备冗余
  10. 【小白学云计算】xmpp开源服务器的配置和安装图文详解