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

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

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

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

例如:

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

关于过渡动画的调试技巧

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

动画的小技巧

  1. 在删除DOM节点的时候,我遇到了这样一个问题,动画结束之后,删除之前,这个DOM元素依然在父元素中,父元素的高度依然被他撑大。删除之后的一瞬间,父元素的高度不被他撑大了,所以立即改变,在这里就产生了一些不平滑的动作,看起来很突兀。想了很久最后用一个感觉不那么优雅的办法解决了,如果有人看到这里,有更好的方法,请务必留言告诉我,谢谢。
  2. 我的方法是,在动画结束的时候,将该子元素设置为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. 简单的贝叶斯分类器的python实现

    # -*- coding: utf-8 -*- ''' >>> c = Classy() >>> c.train(['cpu', 'RAM', 'ALU', 'io ...

  2. 【转载】COM 组件设计与应用(十)——IDispatch 接口 for VC.NET

    原文:http://vckbase.com/index.php/wv/1225.html 一.前言 终于写到了第十回,我也一直期盼着写这回的内容耶,为啥呢?因为自动化(automation)是非常常用 ...

  3. 25-[jQuery]-ajax

    1.什么是AJAX AJAX = 异步的javascript和XML(Asynchronous Javascript and XML) 简言之,在不重载整个网页的情况下,AJAX通过后台加载数据,并在 ...

  4. CF 1093 G. Multidimensional Queries

    G. Multidimensional Queries 链接 分析: 考虑如何去掉绝对值符号. $\sum \limits_{i = 1}^{k} |a_{x, i} - a_{y, i}|$,由于k ...

  5. 静态成员变量和静态成员函数(static)

    数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配 ...

  6. python 实现字符串的切片功能

    '''string切片''' def string_split(stringone,split): m = [] if type(split)!=str: return False if split ...

  7. zabbix3.4 监控路由器报错No Such Instance currently exists at this OID

    zabbix 3.4 监控报错No Such Instance currently exists at this OID 1.首先查看监控的路由器的监控项是否报警 监控主机报错出现这个 No Such ...

  8. nginx遇到的配置问题

    配置的例子如下: server { listen ; server_name localhost; #kzjtrans-web location /kzjtrans-web/ { proxy_pass ...

  9. Unity优化方向——优化Unity游戏中的图形渲染(译)

    CPU bound:CPU性能边界,是指CPU计算时一直处于占用率很高的情况. GPU bound:GPU性能边界,同样的是指GPU计算时一直处于占用率很高的情况. 原文:https://unity3 ...

  10. Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】

    Spring Cloud(二):服务注册与发现 Eureka[Finchley 版]  发表于 2018-04-15 |  更新于 2018-05-07 |  上一篇主要介绍了相关理论,这一篇开始我们 ...