Vuejs第七篇之Vuejs过渡动画案例全面解析

本篇资料是小编结合官方文档整理的一套更全面细致的说明,代码更多更全。

本篇资料来于官方文档:

http://cn.vuejs.org/guide/transitions.html

下面看下过渡动画相关知识:

①过渡动画的定义;

简单来说,就是当模块消失、出现时,会以什么样的形式消失和出现;

如果要使用过渡动画,则在标签里加入属性:

transition=”过渡动画名”

例如:

<div class="box" v-if="box_1" transition="mytran">1</div>

这里是mytran就是过渡动画名,他是一个类名,动画将基于这个名字而添加多个不同的扩展名(具体请参看下面)

②过渡动画绑定的事件:

【1】v-if

【2】v-show

【3】v-for(只在插入和删除时触发,可以自己写,或者使用vue-animated-list插件);

自己写例如:

<div v-for="i in items" class="box" transition="mytran">{{i}}</div>

动画写法略(参照下面)

【4】动态组件;

【5】在组件的根节点上,并且被Vue实例DOM方法触发(例如:vm.$appendTo(el))。大概就是说,把组件添加到某个根节点上去。

③CSS动画:

【1】首先,需要有transition属性,然后取得其值;

【2】其次,CSS里需要有以值为名的三个类名,分别是:

假设transition的值为mytran,则类名为

说明

.mytran-transition

动画状态,css的transition属性放在这里,他表示的类会始终存在于DOM之上;

另外这里的样式会覆盖标签的默认class提供的样式

.mytran-enter

进入时,组件从这个css状态扩展为当前css状态,这个类只存在最开始的一帧

.mytran-leave

退出时,组件从原来的css状态恢复为这个状态,这个类从退出开始时生效,在退出结束时删除。

如代码:

<style>
.box {
width: 100px;
height: 100px;
border: 1px solid red;
display: inline-block;
} 

/*这个定义动画情况,以及存在时的样式,这个样式会覆盖class里的样式*/
.mytran-transition {
transition: all 0.3s ease;
background-color: greenyellow;
} 

/* .mytran-enter 定义进入的开始状态 */
/* .mytran-leave 定义离开的结束状态 */
.mytran-enter, .mytran-leave {
height: 0;
width: 0;
}
</style>
<div id="app">
<button @click="change">点击随机隐藏和显示</button>
<br/>
<div class="box" v-if="box_1" transition="mytran">1</div>
<div class="box" v-if="box_2" transition="mytran">2</div>
<div class="box" v-if="box_3" transition="mytran">3</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
box_1: true,
box_2: true,
box_3: true
},
methods: {
change: function () {
for (var i = 1; i < 4; i++) {
this['box_' + i] = Math.random() > 0.5 ? true : false;
}
}
}
})
setInterval(vm.change, 300);
</script>

点击会随机让3个方块隐藏或者显示;

④JavaScript钩子:

【1】简单来说,这个不影响CSS动画(依然是那三个类的变化);

【2】这个主要用于抓取进入和离开各四个时刻,用于做某些事情;

【3】这八个时刻分别为:

进入:beforeEnter(进入之前),enter(进入动画刚开始),afterEnter(进入动画结束),enterCancelled(进入被中断);

退出:beforeLeave(退出之前),leave(退出动画刚开始),afterLeave(退出动画结束),leaveCancelled(退出被中断);

【4】对DOM的修改,部分情况下会恢复,例如在leave这一步修改dom的textContent属性,将在dom重新进入时恢复原状;但若在enter这一步修改,则不会恢复。

如代码:

Vue.transition('mytran', {
beforeEnter: function (el) { //进入之前
console.log("进入动画开始时间:" + new Date().getTime());
},
enter: function (el) {
el.textContent = new Date();
},
afterEnter: function (el) {
console.log("进入结束时间:" + new Date().getTime());
},
beforeLeave: function (el) {
console.log("离开动画开始时间:" + new Date().getTime());
},
leave: function (el) {
$(el).text("离开中..." + new Date());
},
afterLeave: function (el) {
console.log("离开结束时间:" + new Date().getTime());
}
})

⑤自定义过渡类名:

之所以要自定义过渡类名,是因为我们不可能要求每个css动画的样式,都是按照Vuejs标准的写法来写的(比如我们下载别人写的代码);

注:需要在声明相关的Vue实例之前进行定义。

首先,推荐一个Vuejs官方教程推荐的动画集合:(这个不是下载链接,需要打开它去找到下载链接才能下载)

https://daneden.github.io/animate.css/

下载后,导入这个css文件,然后开始自定义动画;

<div id="app">
<button @click="change">点击随机隐藏和显示</button>
<br/>
<div class="box animated" v-if="box" transition="bounce">1</div>
</div>
<script>
Vue.transition("bounce", {
enterClass: 'bounceInLeft',
leaveClass: 'bounceOutRight'
})
var vm = new Vue({
el: '#app',
data: {
box: true
},
methods: {
change: function () {
this.box = !this.box;
}
}
});
</script>

解释:

【1】进行动画的标签,需要有animated这个class;

【2】enterClass和leaveClass相当于之前的xxx-enter和xxx-leave;

【3】效果是从左边闪进来,从右边闪出去。

【4】需要在声明Vue实例前设置动画,否则会无效;

⑥使用animation动画

在Vuejs中,animation动画和transition动画是不同的。

简单来说,transition动画分为三步:常驻类,进入时触发的类,退出时触发的类;只有常驻类有transition动画属性,其他两步只有css状态;

而animation动画分为两步:进入时触发的类,退出时触发的类。当然,还有xxx-transition这个类存在于dom之中(这个类可以用于设置动画原点,或者干脆不设置这个类);

在animation动画中,进入和退出时的class类,都应该有动画效果,例如:

@keyframes fat {
0% {
width: 100px
}
50% {
width: 200px
}
100% {
width: 100px
}
}
.fat-leave, .fat-enter {
animation: fat 1s both;
}

进入和退出时,执行的类名和transition一样,都是xxx-leave和xxx-enter这样格式的;

当然,也可以自定义类名。

示例代码:

<style>
.box {
width: 100px;
height: 100px;
border: 1px solid red;
display: inline-block;
}
@keyframes fat {
0% {
width: 100px
}
50% {
width: 200px
}
100% {
width: 100px
}
}
.fat-leave, .fat-enter {
animation: fat 1s both;
}
</style>
<div id="app">
<button @click="change">点击随机隐藏和显示</button>
<br/>
<div class="box animated" v-if="box" transition="fat">1</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
box: true
},
methods: {
change: function () {
this.box = !this.box;
}
}
});
</script>

效果:

消失:先变宽,再恢复,然后消失;

进入:出现,变宽,再恢复,停留;

这里偷懒共用了同一个动画效果。

⑦除此之外,还有

【1】显式声明动画类型(假如动画同时存在transition和animation,且分情况执行其中一种);

【2】过渡流程详解(触发动画时,js钩子执行与css执行的顺序);

【3】CSS动画(就是animation,像上面那样已经写过了,具体略);

【4】JavaScript过渡(不是js钩子,钩子是指在某个阶段会调用某个函数,但这个钩子跟动画无关),用JavaScript来控制动画,比如jquery的animate方法;

【5】v-for使用的渐进过渡;

由于暂时用不上,所以略掉,需要查看的请打开连接:

http://cn.vuejs.org/guide/transitions.html

以上所述是小编给大家介绍的Vuejs第七篇之Vuejs过渡动画案例全面解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 详解Vue中添加过渡效果

    最近在学习Vue这个框架,发现新的版本中,官网的文档里面说的过渡效果,如果直接粘贴官方的例子中的代码,发现并没有过渡的效果,经过反复测试之后终于知道怎么搞了,把测试的过程总结一下,以便以后回顾. 贴上成功的代码: html: <div v-if="show" :transition="expand">hello</div> //或者 <div v-if="show" v-bind:transition="e

  • vue中渐进过渡效果实现

    本文实例为大家分享了vue 渐进过渡效果,供大家参考,具体内容如下,供大家参考,具体内容如下 transition 与 v-for 一起用时可以创建渐近过渡.给过渡元素添加一个特性 stagger,enter-stagger 或 leave-stagger: <div v-for="item in list" transition="stagger" stagger="100"></div> 或者,提供一个钩子 stagg

  • Vue中添加过渡效果的方法

    关于vue的过渡效果,vue官方给的概述是这样的. Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果. 包括以下工具: 1.在 CSS 过渡和动画中自动应用 class 2.可以配合使用第三方 CSS 动画库,如 Animate.css 3.在过渡钩子函数中使用 JavaScript 直接操作 DOM 4.可以配合使用第三方 JavaScript 动画库,如 Velocity.js 其中里面也给出了许多的例子,但是例子给到了"多个元素过渡"的时候,就没有案例的代

  • Vue.2.0.5过渡效果使用技巧

    概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果. 包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate.css 在过渡钩子函数中使用 JavaScript 直接操作 DOM 可以配合使用第三方 JavaScript 动画库,如 Velocity.js 在这里,我们只会讲到进入.离开和列表的过渡, 你也可以看下一节的 管理过渡状态. 单元素/组件的过渡 Vue 提供了 transition 的封装组件,

  • Vue.js实现微信过渡动画左右切换效果

    前言 在awesomes上寻找移动端框架的时候意外发现了vux的页面切换效果,后面由于其他考虑没有选用vuex但是这个切换效果确实感觉很有新意,也就看了下源码,这里贴一份备用. 需要用到的技术栈:Vue+Vuex 先看看效果图 过渡动画 示例代码 //app.vue <transition :name="'vux-pop-' + (direction === 'forward' ? 'in' : 'out')"> <keep-alive> <router-

  • 详解Vue学习笔记进阶篇之列表过渡及其他

    本文将介绍Vue中的列表过渡,动态过渡, 以及可复用过渡是实现. 列表过渡 目前为止,关于过渡我们已经讲到: 单个节点 同一时间渲染多个节点中的一个 那么怎么同时渲染整个列表,比如使用 v-for ?在这种场景中,使用 <transition-group>组件.在我们深入例子之前,先了解关于这个组件的几个特点: 不同于 <transition>, 它会以一个真实元素呈现:默认为一个<span>.你也可以通过 tag 特性更换为其他元素. 内部元素 总是需要 提供唯一的

  • 聊一聊Vue.js过渡效果

    通过 Vue.js 的过渡系统,你可以轻松的为 DOM 节点被插入/移除的过程添加过渡动画效果.Vue 将会在适当的时机添加/移除 CSS 类名来触发 CSS3 过渡/动画效果,你也可以提供相应的 JavaScript 钩子函数在过渡过程中执行自定义的 DOM 操作. 以 v-transition="my-transition" 这个指令为例,当带有这个指令的 DOM 节点被插入或移除时,Vue 将会: 用 my-transition 这个 ID 去查找是否有注册过的 JavaScri

  • Vue 过渡实现轮播图效果

    Vue 过渡 Vue 的过渡系统是内置的,在元素从 DOM 中插入或移除时自动应用过渡效果. 过渡的实现要在目标元素上使用 transition 属性,具体实现参考Vue2 过渡 下面例子中我们用到列表过渡,可以先学习一下官方的例子 要同时渲染整个列表,比如使用 v-for,我们需要用到 <transition-group> 组件 Vue 轮播图 我们先看这样一个列表 <ul> <li v-for="list in slideList"> <i

  • Vue 过渡(动画)transition组件案例详解

    Vue过度(动画),本质走的是CSS3:transtion,animation. 控制器div显示/隐藏,代码如下: <div id="box"> <input type="button" value="按钮" @click="toggle"> <div id="div1" v-show="isShow"></div> </div&g

  • Vue.js每天必学之过渡与动画

    通过 Vue.js 的过渡系统,可以在元素从 DOM 中插入或移除时自动应用过渡效果.Vue.js 会在适当的时机为你触发 CSS 过渡或动画,你也可以提供相应的 JavaScript 钩子函数在过渡过程中执行自定义的 DOM 操作. 为了应用过渡效果,需要在目标元素上使用 transition 特性: <div v-if="show" transition="my-transition"></div> transition 特性可以与下面资

随机推荐