Vue中提供了`<transition>`和`<transition-group>`来为元素增加过渡动画。文档写的很清楚,但是实际使用起来还是费了一番功夫。这里做一个简单的记录:
单个过渡使用`<transition>`元素把要过渡的部分包裹起来,`<transition>`不会在DOM中渲染出来,只是做一个标记。其中常用的属性主要是:

- name : 匹配相应的过渡类名,当没有name的时候默认为v-enter,v-leave-active等
- mode:控制离开/进入的先后顺序,out-in或者in-out

多个元素过渡的时候使用`<transition-group>`元素把要过渡的部分包裹起来,`<transition-group>`会在DOM中渲染一个新的元素,把要过渡的这多个部分包裹起来,渲染的元素默认是span,可以使用tag属性来设置。常用的属性是:

- tag: 默认为span,实际使用的时候,可以设置为要过渡的部分的父元素的类型。
- name:过渡类名,同上
注意,<transition-group>的每个子节点必须有独立的key,动画才能正常工作。并且这里的key需要是item的一部分才可以,如item.id。我偷懒想用循环的index,会bug。该bug具体表现为:当你删除多个节点中的任意一个时,动画永远发生在最后一个节点身上。

例如:

//html
<transition-group tag="ul" name="slide">
<li v-for="item in items" :key="item.id">
{{ item.text }}
</li>
</transition-group>
//css
.slide-enter{opacity:0;transform: translate(-50px,0px);}
.slide-leave-active {opacity:0;transform:translate(0px,-50px);}

关于过渡动画的调试技巧

这里是很重要的一个地方,动画的调试不像js调试,能够设置断点,逐步跟踪,动画不执行时,经常并不会报错,我在实际使用的过程中,一开始也花了大量的时间在调试上,后来找到了技巧,就简单多了。
动画调试步骤;
1.首先确认是否有给要过渡的DOM元素加上`transition: all .2s ease;`属性,在不使用animation时,必须有这个过渡属性,才能平滑改变DOM的css属性,如果忘记加了,也不会报错,但就是一直没效果。
2.然后在浏览器F12中,选择要执行动画的DOM元素,然后在F12中添加动画结束状态时该DOM的css属性。这一步的原因在于,很多时候我们以为动画没有执行,其实是执行了,只是看不出来而已。比如子div撑大了父div的高度,此时动画改变父div的高度,也并没有用。所以我们一开始先确认一下,保证动画结束时的状态准确无误。如果无误,这时候在控制台改变属性,就已经能看到动画正确执行时,应该有的渐变效果了。
3.最后,如果动画还没有正确执行,就要检查相应的name,tag,key等属性是否有正确添加,过渡类名的选择是否有误。在插入元素时,是先插入,再动画的,所以使用v-enter;而在删除元素时,是先动画,再删除的,所以使用v-leave-active。具体使用什么根据需求来定。

动画的小技巧

在删除DOM节点的时候,我遇到了这样一个问题,动画结束之后,删除之前,这个DOM元素依然在父元素中,父元素的高度依然被他撑大。删除之后的一瞬间,父元素的高度不被他撑大了,所以立即改变,在这里就产生了一些不平滑的动作,看起来很突兀。想了很久最后用一个感觉不那么优雅的办法解决了,如果有人看到这里,有更好的方法,请务必留言告诉我,谢谢。
我的方法是,在动画结束的时候,将该子元素设置为position:absolute,这样他就不会撑大父元素的高度了,但是这又产生了一个新的问题:删除时该元素会在绝对定位之后的地方闪烁一下才消失,为了避免闪烁,在绝对定位之后,再给他一个top:-99999px;把绝对定位的元素移动到屏幕外,避免用户看到闪烁。虽然这个方法总觉得不太合适,但是能解决问题,在有更好的方式之前,也只能先这样了。

版权声明:本文为博主原创文章,未经博主允许不得转载。原账号CreabineChen现已不用,所有博客均已迁移过来。

vue 过渡效果的更多相关文章

  1. Vue过渡效果之CSS过渡

    前面的话 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.本文将从CSS过渡transition.CSS动画animation及配合使用第三方CSS动画库(如animate. ...

  2. Vue过渡效果之JS过渡

    前面的话 与CSS过渡不同,JS过渡主要通过事件进行触发.本文将详细介绍Vue过渡效果之JS过渡 事件钩子 JS过渡主要通过事件监听事件钩子来触发过渡,共包括如下的事件钩子 <transitio ...

  3. vue过渡效果

    vue过渡效果. <transition name='slide-fade'> <div class="top" @click='gotoTop' v-if='s ...

  4. 【译】如何使用Vue过渡效果来提升用户体验

    在Vue应用中添加过渡效果是一个可以使你的项目感觉更专业的简单方法.通过提升用户体验,可以使你的网站留住更多的用户以及提高转化率. 只需要简单的处理就可以获得巨大的回报,何乐而不为? 在这个指南中,我 ...

  5. vue 过渡效果-列表过渡

    到目前为止,关于过渡我们已经讲到, 单个节点 同一时间渲染多个节点的一个 那么怎么同时渲染整个列表,比如使用v-if?在这种场景下,使用<transition-group>组件,在我们深入 ...

  6. Vue过渡效果的实现

    1.Vue 过渡组件 Vue 在插入.更新或者移除 DOM 时,使用内置的过渡封装组件可以实现过渡效果 语法格式: <transition name = "xx"> & ...

  7. Vue_(组件)过渡效果

    Vue.js进入/离开 & 列表过渡 传送门 进入/离开过渡效果:Vue在插入.更新或移除DOM时,可以设置一些动画效果: 过渡效果中也提供了对应的钩子函数,这些钩子函数需要在<tran ...

  8. vue.js之过渡效果-css

    概述 vuejs的过渡效果可以让我们的页面元素在出现和消失时实现过渡.官方文档这样描述过渡效果的方式: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Anima ...

  9. Vue深度学习(5)-过渡效果

    简介 通过 Vue.js 的过渡系统,你可以轻松的为 DOM 节点被插入/移除的过程添加过渡动画效果.Vue 将会在适当的时机添加/移除 CSS 类名来触发 CSS3 过渡/动画效果,你也可以提供相应 ...

随机推荐

  1. CF248E Piglet's Birthday

    题面 题意翻译 给定$n$个货架,初始时每个上面有$a[i]$个蜜罐. 有$q$次操作,每次操作形如$u,v,k$,表示从货架$u$上任意选择$k$个蜜罐试吃(吃过的也还能吃),吃完后把这$k$个蜜罐 ...

  2. 详解 nginx location ~ .*\.(js|css)?$ 什么意思?

    语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...

  3. CS100.1x-lab1_word_count_student

    这是CS100.1x第一个提交的有意义的作业,自己一遍做下来对PySpark的基本应用应该是可以掌握的.相关ipynb文件见我github. 这次作业的目的如题目一样--word count,作业分成 ...

  4. 【JUC源码解析】ForkJoinPool

    简介 ForkJoin 框架,另一种风格的线程池(相比于ThreadPoolExecutor),采用分治算法,工作密取策略,极大地提高了并行性.对于那种大任务分割小任务的场景(分治)尤其有用. 框架图 ...

  5. REVIT个人学习笔记——1.简介及熟悉界面

    此贴并非教学,主要是自学笔记,所述内容只是些许个人学习心得的记录和备查积累,难以保证观点正确,也不一定能坚持完成. 如不幸到访,可能耽误您的时间,也难及时回复,贴主先此致歉.如偶有所得,相逢有缘,幸甚 ...

  6. 关于dbw 与dbm 的计算

    一分贝(dB)表示单元信号强度的相对差异.其比率的基础对数为10,,如dB = 10 x Log10 (P1/P2). 基础10对数规则: Log10 (AxB) = Log10(A) + Log10 ...

  7. TensorFlow Python2.7环境下的源码编译(二)安装配置

    源代码树的根目录中包含了一个名为 configure 的 bash 脚本. $ ./configure 接下来,配置系统会给出各种询问,以确认编译时的配置参数.   一.重要参数解释 Do you w ...

  8. linux shell 完成批量压缩文件

    首先得到文件列表 使用 list -1 注意是1 不是l 然后是用一个循环内包装zip代码 #!/bin/bash list=`` for var in $list do echo $var zip ...

  9. 帝国后端php通用Api接口

    先来看一下api数据接口和那些小程序之间的关系,如下面的描述,百度小程序,微信小程序,轻应用,app像这些我们都称为终端小应用.api提供数据:会为各终端小应用提供统一的数据格式.客户小应用,从api ...

  10. docker 下载安装与配置

    # mac离线安装dockerhttps://download.docker.com/mac/stable/24312/Docker.dmg # windows离线安装dockerhttp://mir ...