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,一经查实,立即删除!

相关文章

halcon create_ocr_class_svm 使用SVM分类器创建OCR分类器

目录create_ocr_class_svm&#xff08;算子&#xff09;描述参数create_ocr_class_svm&#xff08;算子&#xff09; create_ocr_class_svm - 使用支持随机向量机制创建OCR分类器。 create_ocr_class_svm&#xff08;:: WidthCharacter&#xff0c;HeightCharacter&#xff0…

码率跟视频质量有关系

码率跟视频质量有关系.首先要清楚, 相同的视频编码方式下, 码率越高肯定画面越清晰. 但是高到一定值, 再往上的画面改善程度就不明显了, 只会增大文件体积. 所以码率选的合适, 才可以保证清晰度又保持文件不会太大. 个人经验如果是h.264编码(当前最好的视频压缩编码方案), …

SQL 字符串分割表函数

1 --字符串分割表函数2 declare str varchar(1000)3 declare split varchar(10) 4 5 declare i int;6 declare count int;7 8 declare ChildStr varchar(1000);9 declare splitStr varchar(1000); 10 declare Index int; 11 12 declare table as table (rowId int,splitStr va…

语句:分支语句、switch case ——7月22日

语句的类型包括&#xff1a;声明语句、表达式语句、选择语句、循环语句、跳转语句、异常语句 1&#xff0e;声明语句引&#xff1a;入新的变量或常量。 变量声明可以选择为变量赋值。 在常量声明中必须赋值。 例如&#xff1a; int i 0;//声明变量i 并赋值&#xff0c;也可以不…

halcon write_ocr_trainf 将训练字符存储到文件中

目录write_ocr_trainf&#xff08;运算符&#xff09;描述参数write_ocr_trainf&#xff08;运算符&#xff09; write_ocr_trainf - 将训练字符存储到文件中。 write_ocr_trainf&#xff08;Character&#xff0c;Image :: Class&#xff0c;TrainingFile ? 描述 运算符w…

码率计算文章

http://bbs.dvbcn.com/showtopic-41431-1.html

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…

lua去掉字符串中的UTF-8的BOM三个字节

废话不多说&#xff0c;还是先说点吧&#xff0c;项目中lua读取的text文件如果有BOM&#xff0c;客户端解析就会报错&#xff0c;所以我看了看&#xff0c;任务编辑器swGameTaskEditor 在写入文件的时候&#xff0c;也不知道为什么有的文件就是UTF-8BOM格式&#xff1b;但一般都…

JQuery对象与DOM对象的区别与转换

1.jQuery对象和DOM对象的区别 DOM对象&#xff0c;即是我们用传统的方法(javascript)获得的对象&#xff0c;jQuery对象即是用jQuery类库的选择器获得的对象; eg: var domObj document.getElementById("id"); //DOM对象var $obj $("#id"); //jQuery对象;…

halcon append_ocr_trainf 将字符添加到训练文件中

目录append_ocr_trainf&#xff08;算子&#xff09;描述参数append_ocr_trainf&#xff08;算子&#xff09; append_ocr_trainf - 将字符添加到训练文件中。 append_ocr_trainf&#xff08;Character&#xff0c;Image :: Class&#xff0c;TrainingFile ? 描述 运算符a…

CCD 尺寸

CCD&#xff08;包括CMOS感光元件&#xff09;的面积是按其矩形对角线英寸长度为指标的。这和定义电视屏幕尺寸类似。一英寸是25.4毫米。1/2.0英寸、1/1.8都是指CCD 对角线有多少分之一英寸长&#xff0c;分母小的其分数值就大&#xff0c;相应感光元件面积也大。 1/2.…

Quagga的安装碰到的问题

1.如果出现以下错误&#xff1a; vtysh: symbol lookup error: /usr/local/lib/libreadline.so.6: undefined symbol: UP 解决方法如下: 1.rootlocalhost:~ # cd /usr/local/lib 2.rootlocalhost:/usr/local/lib# ls -la libreadline* 3.rootlocalhost:/usr/local/lib# mkd…

X264电影压缩率画质

X264电影压缩率画质全对比&#xff1a; http://www.mov8.com/dvd/freetalk_show.asp?id29778

halcon read_ocr_trainf 从文件中读取训练字符并转换为图像

目录read_ocr_trainf&#xff08;算子&#xff09;描述参数read_ocr_trainf&#xff08;算子&#xff09; read_ocr_trainf - 从文件中读取训练字符并转换为图像。 read_ocr_trainf&#xff08;&#xff1a;Characters&#xff1a;TrainingFile&#xff1a;CharacterNames&am…

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

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

Linux 下实现普通用户只能写入某个目录

今天老婆问了我一个问题&#xff1a;如何在linux 下实现某个目录普通用户能够写入文件&#xff0c;但是不能删除或修改&#xff08;只能由root 删除或修改&#xff09;。开始的两分钟里&#xff0c;我初步判断这是做不到的&#xff0c;因为linux 下能 写入&#xff08;w&#x…

CCD和CMOS摄像头成像原理以及其他区别

&#xfeff;&#xfeff;CCD的第二层是分色滤色片&#xff0c;目前有两种分色方式&#xff0c;一是RGB原色分色法&#xff0c;另一个则是CMYG补色分色法&#xff0c;这两种方法各有利弊。不过以产量来看&#xff0c;原色和补色CCD的比例大约在2&#xff1a;1左右。原色CCD的优…

FFMPEG分析比较细的文章

http://blog.csdn.net/ym012/article/details/6538301

恢复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;…