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


Posted in Javascript onSeptember 05, 2016

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

本篇资料来于官方文档:

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里需要有以值为名的三个类名,分别是:

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

假设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过渡动画案例全面解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js技巧--转义符&quot;\&quot;的妙用
Jan 09 Javascript
JS event使用方法详解
Apr 28 Javascript
js调试工具console.log()方法查看js代码的执行情况
Aug 08 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
Jun 08 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
Nov 07 Javascript
js实现登录与注册界面
Nov 01 Javascript
Vue.js 中的 v-cloak 指令及使用详解
Nov 19 Javascript
node.js开发辅助工具nodemon安装与配置详解
Feb 06 Javascript
原生JS实现多条件筛选
Aug 19 Javascript
微信小程序实现翻牌抽奖动画
Sep 21 Javascript
echarts实现晶体球面投影的实例教程
Oct 10 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
Sep 05 #Javascript
JS简单随机数生成方法
Sep 05 #Javascript
使用React实现轮播效果组件示例代码
Sep 05 #Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
Sep 05 #Javascript
Bootstrap的fileinput插件实现多文件上传的方法
Sep 05 #Javascript
jQuery树形插件jquery.simpleTree.js用法分析
Sep 05 #Javascript
AngularJS实现单独作用域内的数据操作
Sep 05 #Javascript
You might like
php 中英文语言转换类代码
2011/08/11 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
python验证身份证信息实例代码
2019/05/06 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
python编写微信公众号首图思路详解
2019/12/13 Python
django列表筛选功能的实现代码
2020/03/27 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Python如何读取、写入CSV数据
2020/07/28 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
村委会贫困证明
2014/01/14 职场文书
烹调加工管理制度
2014/02/04 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
2015年教研员工作总结
2015/05/26 职场文书
宣传委员竞选稿
2015/11/19 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书