Vue 教程第九篇—— 动画和过度效果

过渡效果

SPA 中组件的切换有一种生硬的隐藏显示感觉,为了更好的用户体验,让组件切换时淡出淡入,Vue 提供了专门的组件 transition。

过滤效果应用场景

  • 条件渲染 (使用 v-if)
  • 条件展示 (使用 v-show)
  • 动态组件
  • 组件根节点

过渡状态

  • enter:定义进入过渡的开始状态。在元素被插入时生效。
  • endter-active:定义过渡的状态。在元素整个过渡过程中作用,在元素被插入时生效。
  • enter-to: 2.1.8版及以上 定义进入过渡的结束状态。
  • leave:定义离开过渡的开始状态。在离开过渡被触发时生效。
  • leave-active:定义过渡的状态。在元素整个过渡过程中作用,在离开过渡被触发后立即生效。
  • leave-to: 2.1.8版及以上 定义离开过渡的结束状态。

每个状态在使用的时候都是在 CSS 中使用,结合组件 transition 的 name 属性。如 <transition name="fade"></transition>,对应的是 fade- 加上每个状态:fade-enter

CSS 过渡

使用到组件 transition 的属性: name

<style type="text/css" media="screen">/*初始状态*/.fade-enter{opacity: 0;}/*已经准备就绪*/.fade-enter-active{transition: all .5s;}/*已经消失*/.fade-leave-active{opacity: 0; transition: all .5s;}
</style><div id="app"><input type="button" :value="show ? 'hide' : 'show'" @click="show = !show" /><br/><transition name="fade"><img src="imgs/green.jpg" v-show="show" /></transition>
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {show: true}})
</script>

效果预览

CSS 动画

使用到组件 transition 的属性: name

<style type="text/css" media="screen">.fade-enter-active{animation: fade-in .5s;}.fade-leave-active{animation: fade-out .5s;}@keyframes fade-in{from{opacity: 0;}to{opacity: 1;}}@keyframes fade-out{from{opacity: 1;}to{opacity: 0;}}
</style><div id="app"><input type="button" :value="show ? 'hide' : 'show'" @click="show = !show" /><br/><transition name="fade"><img src="imgs/green.jpg" v-if="show" /></transition>
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {show: true}})
</script>

效果预览

初始渲染的过滤

第一次加载时的过渡效果,使用到组件 transition 的属性: appear appear-class appear-active-class

<style type="text/css" media="screen">.fade-enter{opacity: 0;}.fade-enter-active{transition: all 3s;}
</style><div id="app"><transition appear appear-class="fade-enter" appear-active-class="fade-enter-active"><img src="imgs/green.jpg" /></transition>
</div><script type="text/javascript">var vm = new Vue({el: '#app'})
</script>

效果预览

多个元素的过河效果

同时生效的进入和离开的过渡不能满足所有要求,所以 Vue 提供了 过渡模式:

  • in-out:新元素先进行过渡,完成之后当前元素过渡离开。
  • out-in:当前元素先进行过渡,完成之后新元素过渡进入。

使用到组件 transition 的属性: mode

<style type="text/css" media="screen">.fade-enter{opacity: 0;}.fade-enter-active{transition: all .5s;}.fade-leave-active{opacity: 0; transition: all .5s;}
</style><div id="app"><fieldset><legend><h3>mode = in-out</h3></legend><div><input type="button" :value="red ? 'green' : 'red'" @click="red = !red" /><br/><transition name="fade" mode="in-out">  <img src="imgs/red.jpg" v-if="red" key="red"/><img src="imgs/green.jpg" v-else key="green"/></transition>           </div></fieldset><fieldset><legend><h3>mode = out-in</h3></legend><div><input type="button" :value="flag == 1 ? 'green' : flag == 2 ? 'yellw' : 'red'" @click="flag = flag == 1 ? 2 : flag == 2 ? 3 : 1" /><br/><transition name="fade" mode="out-in">  <img src="imgs/red.jpg" v-if="flag == 1" key="red"/><img src="imgs/green.jpg" v-else-if="flag == 2" key="green"/><img src="imgs/yellow.jpg" v-else key="yellow" /></transition>               </div></fieldset> 
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {red: true,flag: 1}})
</script>

效果预览

列表(v-for)的过渡效果

v-for 生成列表过渡效果要使用组件 transition-group,组件提供属性 tag 表示该组件将会渲染成对应的 DOM 节点,其它的使用和 transition 一样。

<style type="text/css" media="screen">*{list-style: none;}li{width: 300px; margin-bottom: 5px; padding: 10px 20px; background-color: #ccc;}.list-enter{opacity: 0; transform: translateX(300px);}.list-enter-active{transition: all .5s;}.list-leave-active{transition: all .5s; opacity: 0; transform: translateX(-300px);}
</style><div id="app"><p><input type="button" value="AddItem" @click="addItem"><input type="button" value="RemoveItem" @click="removeItem"></p><transition-group tag="ul" name="list"><li v-for="(item, index) in items" :key="item">Item {{index}}</li></transition-group>
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {items: [1,2,3]},methods: {randomIndex: function(){return  parseInt(this.items.length * Math.random());},addItem: function(){this.items.splice(this.randomIndex(), 0, this.items.length + 1);},removeItem: function(){this.items.splice(this.randomIndex(), 1);}}})
</script>

效果预览

自定义过渡的类名

我们可以通过以下特性来自定义过渡类名:

  • enter-class
  • enter-active-class
  • enter-to-class (2.1.8+)
  • leave-class
  • leave-active-class
  • leave-to-class (2.1.8+)

他们的优先级高于普通的类名,这对于 Vue 的过渡系统和其他第三方 CSS 动画库,如 Animate.css 结合使用十分有用。

<link rel="stylesheet" type="text/css" href="animate.css"><div id="app"><button @click="show = !show">Toggle render</button><transition enter-active-class="animated jello" leave-active-class="animated bounceOutRight"><div v-if="show"><img src="./imgs/green.jpg" /></div></transition>
</div><script type="text/javascript">var vm = new Vue({el: '#app',data: {show: true}})
</script>

效果预览

过渡效果钩子函数

除了用CSS过渡的动画来实现vue的组件过渡,还可以用JavaScript的钩子函数来实现,在钩子函数中直接操作DOM。我们可以在属性中声明以下钩子:

<transitionv-on:before-enter="beforeEnter"v-on:enter="enter"v-on:after-enter="afterEnter"v-on:enter-cancelled="enterCancelled"v-on:before-leave="beforeLeave"v-on:leave="leave"v-on:after-leave="afterLeave"v-on:leave-cancelled="leaveCancelled"
>
</transition>
<script type="text/javascript">var vm = new Vue({el: '#app',methods: {// 过渡进入// 设置过渡进入之前的组件状态beforeEnter: function (el) {// ...},// 设置过渡进入完成时的组件状态enter: function (el, done) {// ...done()},// 设置过渡进入完成之后的组件状态afterEnter: function (el) {// ...},enterCancelled: function (el) {// ...},// 过渡离开// 设置过渡离开之前的组件状态beforeLeave: function (el) {// ...},// 设置过渡离开完成时地组件状态leave: function (el, done) {// ...done()},// 设置过渡离开完成之后的组件状态afterLeave: function (el) {// ...},// leaveCancelled 只用于 v-show 中leaveCancelled: function (el) {// ...}}})
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL Oracle 兼容性之 - INDEX SKIP SCAN (递归查询变态优化) 非驱动列索引扫描优化...

标签 PostgreSQL , Oracle , index skip scan , 非驱动列条件 , 递归查询 , 子树 背景 对于输入条件在复合索引中为非驱动列的&#xff0c;如何高效的利用索引扫描&#xff1f; 在Oracle中可以使用index skip scan来实现这类CASE的高效扫描&#xff1a; INDEX跳跃扫描一般用在W…

如何确定镜头CCD靶面尺寸?

在组建机器视觉系统时&#xff0c;需要选用适合实际应用的产品。今天&#xff0c;中国机器视觉商城的培训课堂为您带来的是关于工业镜头CCD靶面尺寸的确定方法。 在选择镜头时&#xff0c;我们通常要注意一个原则&#xff1a;即小尺寸靶面的CCD可使用对应规格更大的镜头&#x…

(十二)洞悉linux下的Netfilteramp;iptables:iptables命令行工具源码解析【下】

iptables用户空间和内核空间的交互 iptables目前已经支持IPv4和IPv6两个版本了&#xff0c;因此它在实现上也需要同时兼容这两个版本。iptables-1.4.0在这方面做了很好的设计&#xff0c;主要是由libiptc库来实现。libiptc是iptables control library的简称&#xff0c;是Netfi…

恢复Ext3下被删除的文件(转)

前言 下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件。 删除文件 假设我们有一个文件名叫 ‘test.txt’ $ls -il test.txt15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt 注意&#xff1a;: “-il” 选项表示显示文件的i-node号&#xff08;15&#xff09;…

TCP UDP HTTP 的关系和区别

TCP UDP HTTP 三者的关系: TCP/IP是个协议组&#xff0c;可分为四个层次&#xff1a;网络接口层、网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。 在应用层有HTTP、FTP、TELNET、SMTP、DNS等协议。 TCP…

微信开放平台全网发布时,检测失败 —— C#

主要就是三个&#xff1a;返回API文本消息&#xff0c;返回普通文本消息&#xff0c;发送事件消息 --会出现失败的情况 &#xff08;后续补充说明&#xff1a;出现检测出错&#xff0c;不一定是代码出现了问题&#xff0c;也有可能是1.微信方面检测时出现服务器请求失败&…

Zabbix 钉钉报警

话不多说&#xff0c;咱们直接进入正题钉钉报警时基于zabbix&#xff0c;访问钉钉应用接口去推送的报警消息&#xff0c;所以我们需要一个在钉钉创建一个报警应用1、 我做的钉钉报警是基于钉钉自定义应用进行推送的所以需要登录钉钉管理后台进行创建&#xff08;zabbix自定义应…

于敦德:途牛五大战略纵深不惧同质化竞争

&#xfeff;&#xfeff;于敦德说&#xff0c;途牛已经在目的地、出发地、产品系列、客户和品牌五个领域建立起了纵深壁垒&#xff0c;不担心任何局部竞争&#xff0c;将坚决把局部同质化战争打到底。 一个行业的两种公司 包括旅游在内的很多行业通常都有两种公司&#xff1a;…

自定义线程的方式

2019独角兽企业重金招聘Python工程师标准>>> package com.javaxxz.test;public class Demo extends Thread {/*** 创建线程的方式* 方式一&#xff1a;* 1、自定义一个类继承Thread类* 2、重写Thread类的run方法,把自定线程的任务代码写在run方法中* …

20155204 2016-2017-2 《Java程序设计》第8周学习总结

学号 2016-2017-2 《Java程序设计》第X周学习总结 教材学习内容总结 想要取得channel的操作对象&#xff0c;可以使用channels类&#xff0c;它定义了静态方法newChannel()。Buffer的直接子类们都有一个alloocate()方法&#xff0c;可以让你指定Buffer容量。1.java.util.loggin…

HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体

HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体 小哥哥小姐姐觉得有用点个赞呗&#xff01; 示例程序源码&#xff08;加注释&#xff09; 蓝色字体均为算子解释链接&#xff0c;可以前往查看解答 关于显示类函数解释 read_image (Image, ‘ocr/chars_tra…

安装DirectX SDK时出现Error Code:s1023 的解决方案

&#xfeff;&#xfeff;安装DXSDK_Jun10时&#xff08;下载地址&#xff1a;http://www.microsoft.com/en-us/download/confirmation.aspx?id6812 ) 出现下图所示错误 Error Code:s1023 计算机上有安装过更新版的Microsoft Visual C 2010 Redistributable&#xff0c;打开“…

顶级数据库行会Percona阿里全面解析下一代云数据库技术

摘要&#xff1a; 几年前&#xff0c;数据库管理系统的企业市场似乎还如同铜墙铁壁&#xff0c;除了老牌厂商外&#xff0c;其他厂商休想打进来。随着移动互联、物联网技术的发展&#xff0c;多终端应用的时代悄然而至。结构化与非结构化数据的爆发&#xff0c;推动人类社会进入…

C#指定窗口显示位置的方法

小哥哥小姐姐觉得有用点个赞呗&#xff01; C#指定窗口显示位置的方法 1.使用StartPosition MainForm mainform; mainformnew MainForm (); dlgCtrl.StartPosition FormStartPosition.Manual;下面是FormStartPosition里边的定义与解释 // 指定窗体的初始位置。public …

C# 修改项目文件夹名称完全版

目录步骤1、打开项目&#xff0c;修改文件名称2、更改命名空间名称3、在解决方案中用txt1000替换所有test5004、使用记事本打开项目文件&#xff08;.sln文件&#xff09;修改路径5、更改项目文件夹名称6、删除之前的残留文件7、大功告成&#xff01;&#xff01;&#xff01;&…

js中遍历注册事件时索引怎么获取

注意&#xff1a;这种写法&#xff0c;是有问题的。注册事件是在页面加载完毕以后就完成了&#xff0c;但此时并没有触发事件。事件触发是由用户在页面上点击时才会触发&#xff0c;所以说当用户点击时&#xff0c;才会执行事件处理函数&#xff0c;那么此时的i已经变成了4&…

C#DotNetBar TabControl将水平标签设置成竖直

小哥哥小姐姐觉得有用点个赞呗&#xff01; 首先选中整个TabControl控件 更改属性&#xff1a; 完成

使用 Drone 构建 Coding 项目

2019独角兽企业重金招聘Python工程师标准>>> 使用 Drone 构建 Coding 项目 Drone 是一个轻量级的持续集成工具。它具备许多现代持续集成工具的特性&#xff1a;轻巧&#xff08;Docker 镜像不到 10M&#xff09;、部署方便&#xff08;docker-compose 一键部署&…

Visual Studio Code 常用插件整理

常用插件说明&#xff1a; 一、HTML Snippets 超级使用且初级的H5代码片段以及提示 二、HTML CSS Support 让HTML标签上写class智能提示当前项目所支持的样式 三、Debugger for Chrome 让vscode映射chrome的debug功能&#xff0c;静态页面都可以用vscode来打断点调试、配饰稍…

川崎机器人c#通讯(转)

由于本人在工业自动化行业做机器视觉的工作&#xff0c;所以除了图像处理方面要掌握外&#xff0c;还需要与工业机器人进行通信。最近学习了计算机与川崎机器人的TCP/IP通信&#xff0c;于是在这里记录一下。 除了直接与机器人通信外&#xff0c;有一种方式是通过PLC间接通信&a…