会有6个css类名在leave/enter过渡中切换

1,v-enter:定义进入过渡的开始状态,在元素被插入时生效,在下一帧中移除

2,v-enter-active:定义过渡的状态。在元素整个过渡过程中作用,在元素被插入时生效,在transition/animation完成后移除。这个类可以被用来定义过渡的过程时间,延迟和曲线函数。

3,v-enter-to:2.1.8版及以上,定义进入过渡的结束状态,在元素被插入一帧后生效(与此同时,v-enter被删除),在transition/animation完成之后移除。

4,v-leave:定义离开过渡的开始状态。在离开过渡被触发时生效,在下一个帧删除。

5,v-leave-active:定义过渡的状态。在元素整个过渡过程中作用,在离开过渡被触发后立即生效,在transition/animation完成之后移除。这个类可以被用来定义过渡的过程时间,延迟和曲线函数,

6,v-leave-to:在2.1.8版本及以上,定义离开过渡的结束状态,在离开过渡被触发一帧过渡后生效,(与此同时v-leave被删除),在transition/animation完成后移除。

对于这些在leave/enter过渡中切换的类名,v-是这些类名的前缀,使用<transition name="my-transition">可以重置前缀,比如v-enter替换为my-transition-enter.

v-enter-active和v-leave-active可以控制进入/离开过渡的不同阶段。

css过渡

常用的过度都是使用css过渡

下面是一个简单的例子:

<div id="example-1">
<button @click="show = !show">
Toggle render
</button>
<transition name="slide-fade">
<p v-if="show">hello</p>
</transition>
</div>
 
new Vue({
el: '#example-1',
data: {
show: true
}
})
 
/* 可以设置不同的进入和离开动画 */
/* 设置持续时间和动画函数 */
.slide-fade-enter-active {
transition: all .3s ease;
}
.slide-fade-leave-active {
transition: all .8s cubic-bezier(1.0, 0.5, 0.8, 1.0);
}
.slide-fade-enter, .slide-fade-leave-to
/* .slide-fade-leave-active for below version 2.1.8 */ {
transform: translateX(10px);
opacity: 0;
}
 
css动画
css动画用法同css过渡,区别是在动画中v-enter类名在节点插入DOM后不会立即删除,而是在animationed事件触发时删除。
示例: (省略了兼容性前缀)
<div id="example-2">
<button @click="show = !show">Toggle show</button>
<transition name="bounce">
<p v-if="show">Look at me!</p>
</transition>
</div>
 
new Vue({
el: '#example-2',
data: {
show: true
}
})
 
.bounce-enter-active {
animation: bounce-in .5s;
}
.bounce-leave-active {
animation: bounce-in .5s reverse;
}
@keyframes bounce-in {
0% {
transform: scale(0);
}
50% {
transform: scale(1.5);
}
100% {
transform: scale(1);
}
}

自定义过渡类名

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

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

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

实例:

<link href="https://cdn.jsdelivr.net/npm/animate.css@3.5.1" rel="stylesheet" type="text/css">
 
<div id="example-3">
<button @click="show = !show">
Toggle render
</button>
<transition
name="custom-classes-transition"
enter-active-class="animated tada"
leave-active-class="animated bounceOutRight"
>
<p v-if="show">hello</p>
</transition>
</div>
 
new Vue({
el: '#example-3',
data: {
show: true
}
})
同时使用transitions和animations
vue为了知道过渡的完成,必须设置相应的事件监听器。它可以是transitionend和animationend,这取决于给元素应用的css规则。如果你使用其中任何一种,vue能自动识别类型并设置监听。
但是,在一些场景中,你需要给同一元素设置两种过渡动效,比如,animation很快的被触发并完成了,而transition效果还没结束。在这种情况中,你就需要使用type特性并设置animation或transition来明确声明你需要vue监听的类型。
显性的过渡效果持续时间
2.2.0新增
在很多情况下,vue可以自动得出过渡效果的完成时机。默认情况下,vue会等待其在过渡效果的根元素的第一个transitionend或animationend事件。然而也可以不这样设定。--比如我们可以拥有一个精心编排的-序列过渡效果,其中一些嵌套的内部元素相比于过渡效果的根元素有延迟或更长的过渡效果。
在这种情况下,你可以用<transition>组件上的duration属性定制一个显性的过渡效果持续时间(以毫秒计),
<transition :duration="1000">...</transition>
你也可以定制进入和移出的持续时间:
<transition :duration="{ enter: 500, leave: 800 }">...</transition>
 
javascript钩子
可以在属性中声明javascript钩子
<transition
v-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>
// ...
methods: {
// --------
// 进入中
// --------
 
beforeEnter: function (el) {
// ...
},
// 此回调函数是可选项的设置
// 与 CSS 结合时使用
enter: function (el, done) {
// ...
done()
},
afterEnter: function (el) {
// ...
},
enterCancelled: function (el) {
// ...
},
 
// --------
// 离开时
// --------
 
beforeLeave: function (el) {
// ...
},
// 此回调函数是可选项的设置
// 与 CSS 结合时使用
leave: function (el, done) {
// ...
done()
},
afterLeave: function (el) {
// ...
},
// leaveCancelled 只用于 v-show 中
leaveCancelled: function (el) {
// ...
}
}
这些钩子函数可以结合css transitions/animations使用,也可以单独使用
当只有javascript过渡的时候,在enter和leave中,回调函数done是必须的。否则,他们会被同步调用,过渡会立即完成。
推荐对于仅使用javascript过渡的元素添加v-bind:css="false",vue会跳过css的检测,这也可以避免过渡过程中css的影响。
一个使用 Velocity.js的简单例子
<!--
Velocity works very much like jQuery.animate and is
a great option for JavaScript animations
-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script>
 
<div id="example-4">
<button @click="show = !show">
Toggle
</button>
<transition
v-on:before-enter="beforeEnter"
v-on:enter="enter"
v-on:leave="leave"
v-bind:css="false"
>
<p v-if="show">
Demo
</p>
</transition>
</div>
 
new Vue({
el: '#example-4',
data: {
show: false
},
methods: {
beforeEnter: function (el) {
el.style.opacity = 0
el.style.transformOrigin = 'left'
},
enter: function (el, done) {
Velocity(el, { opacity: 1, fontSize: '1.4em' }, { duration: 300 })
Velocity(el, { fontSize: '1em' }, { complete: done })
},
leave: function (el, done) {
Velocity(el, { translateX: '15px', rotateZ: '50deg' }, { duration: 600 })
Velocity(el, { rotateZ: '100deg' }, { loop: 2 })
Velocity(el, {
rotateZ: '45deg',
translateY: '30px',
translateX: '30px',
opacity: 0
}, { complete: done })
}
}
})
初始渲染的过渡
可以通过appear特性设置节点的在初始渲染的过渡
<transition appear>
<!-- ... -->
</transition>
这里默认和进入和离开的过渡一样,同样也可以自定义css类名,
<transition
appear
appear-class="custom-appear-class"
appear-to-class="custom-appear-to-class" (2.1.8+)
appear-active-class="custom-appear-active-class"
>
<!-- ... -->
</transition>
自定义javascript钩子
<transition
appear
v-on:before-appear="customBeforeAppearHook"
v-on:appear="customAppearHook"
v-on:after-appear="customAfterAppearHook"
v-on:appear-cancelled="customAppearCancelledHook"
>
<!-- ... -->
</transition>
 
多个元素的过渡
我们之后讨论多个组件的过渡,对于原生标签可以使用v-if/v-else,最常见的多标签过渡是一个列表和描述这个列表为空消息的元素。
 
<transition>
<table v-if="items.length > 0">
<!-- ... -->
</table>
<p v-else>Sorry, no items found.</p>
</transition>
可以这样使用,但是有一点需要注意:
当有相同标签名的元素切换时,需要通过key特性设置唯一的值来标记以让vue区分它们,否则vue为了效率只会替换相同标签内部的内容,即使在技术上没有必要,给在<transition>组件中的多个元素设置key是一个更好的实践。
示例:
<transition>
<button v-if="isEditing" key="save">
Save
</button>
<button v-else key="edit">
Edit
</button>
</transition>

在一些场景中,也可以通过给同一个元素的key特性设置不同的状态来代替v-if和v-else,上面的例子可以重写为:

<transition>
<button v-bind:key="isEditing">
{{ isEditing ? 'Save' : 'Edit' }}
</button>
</transition>
使用多个v-if的多个元素的过渡可以重写为绑定了动态属性的单个元素过渡,例如:
<transition>
<button v-if="docState === 'saved'" key="saved">
Edit
</button>
<button v-if="docState === 'edited'" key="edited">
Save
</button>
<button v-if="docState === 'editing'" key="editing">
Cancel
</button>
</transition>
可以重写为:
<transition>
<button v-bind:key="docState">
{{ buttonMessage }}
</button>
</transition>
 
// ...
computed: {
buttonMessage: function () {
switch (this.docState) {
case 'saved': return 'Edit'
case 'edited': return 'Save'
case 'editing': return 'Cancel'
}
}
}
过渡模式
同时生效的进入和离开过渡不能满足所有的需求,所以vue提供了过渡模式
  • in-out:新元素先进行过渡,完成之后当前元素离开,
  • out-in:当前元素先进行过渡,完成之后新元素过渡进入,
<transition name="fade" mode="out-in">
<!-- ... the buttons ... -->
</transition>

只用添加一个简单的特性,就解决了之前的过渡问题而无需任何额外的代码。

in-out模式不经常用到,但是对于一些稍微不同的过渡效果还是有用的。

多个组件的过渡

多个组件的过渡很简单,-我们不需要使用key特性,相反,我们只需要使用动态组件:

<transition name="component-fade" mode="out-in">
<component v-bind:is="view"></component>
</transition>
 
new Vue({
el: '#transition-components-demo',
data: {
view: 'v-a'
},
components: {
'v-a': {
template: '<div>Component A</div>'
},
'v-b': {
template: '<div>Component B</div>'
}
}
})
 
.component-fade-enter-active, .component-fade-leave-active {
transition: opacity .3s ease;
}
.component-fade-enter, .component-fade-leave-to
/* .component-fade-leave-active for below version 2.1.8 */ {
opacity: 0;
}
 

vue 过渡的-css-类名的更多相关文章

  1. Vue过渡:CSS过渡

    一 项目结构 二 App.vue <template> <div id="app"> <transition name="fade" ...

  2. Vue 过渡

    过渡 通过 Vue.js 的过渡系统,可以在元素从 DOM 中插入或移除时自动应用过渡效果.Vue.js 会在适当的时机为你触发 CSS 过渡或动画,你也可以提供相应的 JavaScript 钩子函数 ...

  3. Vue过渡与动画

    通过 Vue.js 的过渡系统,可以在元素从 DOM 中插入或移除时自动应用过渡效果.Vue.js 会在适当的时机为你触发 CSS 过渡或动画,你也可以提供相应的 JavaScript 钩子函数在过渡 ...

  4. Vue过渡效果之CSS过渡

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

  5. vue过渡

    vue在插入.更新或者移除DOM时,提供了多种不同方式的应用过渡效果,下面主要总结一些常用的过渡. 单元素过渡(vue1.0) 我们常用的动画是css3的动画,在vue中依旧有效. <!DOCT ...

  6. vue过渡 & 动画---进入/离开 & 列表过渡

    (1)概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animat ...

  7. (尚014)Vue过渡与动画

    操作元素时有个过渡或动画的效果(渐变和移动的效果和放大缩小的效果) 过渡:trasition 动画:animation 1.vue动画的理解 1)操作css的trasition或animation(它 ...

  8. Vue过渡和动画效果展示(案例、GIF动图演示、附源码)

    前言 本篇随笔主要写了Vue过渡和动画基础.多个元素过渡和多个组件过渡,以及列表过渡的动画效果展示.详细案例分析.GIF动图演示.附源码地址获取. 作为自己对Vue过渡和动画效果知识的总结与笔记. 因 ...

  9. 在vue中使用css modules替代scroped

    前面的话 css modules是一种流行的模块化和组合CSS的系统. vue-loader提供了与css modules的集成,作为scope CSS的替代方案.本文将详细介绍css modules ...

随机推荐

  1. java调用windows的wmi获取设备性能数据

    java调用windows的wmi获取监控数据(100%纯java调用windows的wmi获取监控数据) 转:http://my.oschina.net/noahxiao/blog/73163 纯j ...

  2. python3中的range函数

    奇怪的现象 在paython3中 print(range(10)) 得出的结果是 range(0,10) ,而不是[0,1,2,3,4,5,6,7,8,9] ,为什么呢? 官网原话: In many ...

  3. Qcon

    http://2017.qconbeijing.com/?utm_source=tuicool&utm_medium=referral

  4. 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章

    第4章 子查询 4.2.1 Exist 谓语: use TSQLFundamentals2008 select * from Sales.Customers as C where c.country= ...

  5. 一个简单的WeakList的实现

    有的时候,我们会使用到WeakList,它和传统的List不同的是,保存的是对象的弱应用,在WeakList中存储的对象会被GC回收,在一些和UI相关的编程的地方会用到它(弱事件,窗体的通知订阅等). ...

  6. 解决Visual Studio 2013 XAML设计器异常

    今天使用Visual Studio 2013打开一个windows 应用商店程序的时候,发现出现如下异常:    at System.Windows.Input.Cursor.LoadFromFile ...

  7. Shell中 调用/引用/包含 另外的脚本文件的两种方法

    脚本 first (测试示例1) #!/bin/bash echo 'your are in first file' 问)在当前脚本文件中调用另外一个脚本文件? 方法一: 使用 source 脚本 s ...

  8. GNURADIO简单运用

    本文是关于 RF hacking..所以这个就此不表…还是让我们来看看关键的无线解锁器吧..通常我们 hacking 一个无线设备的第一步就是找到目标的工作频率. 我们可以通过每个无线设备自带的FCC ...

  9. Actionscript 3 自定义 matedata

    metadata就是元数据 反应一个类本质的属性 可以通过describeType(obj)来得到反应该对象的xml 要自定义元数据,如[MyMatedata()] package {  public ...

  10. spring的jar包maven地址,统一下载很方便

    最近spring的官网改版了,想下个jar包,还得maven什么的,由于急于开发,懒得整那些个啦,在网上找了个spring的各版本的jar包地址,特此共享下: http://maven.springf ...