官方文档:https://cn.vuejs.org/v2/guide/transitions.html

一、使用过度类名

没有使用动画之前:

<body>

<div id="app">

    <input type="button" value="切换" @click="flag=!flag"/>
<h4>{{flag}}</h4> </div>
<script>
var vm = new Vue({
el:'#app',
data:{
flag:false
}
})
</script>
</body>

来吧展示:



使用动画之后:

  1. 把要实现动画的元素,使用 transition 元素包裹起来
  2. 要实现动画的元素,必须使用 v-if 或 v-show 来进行控制
<input type="button" value="切换" @click="flag=!flag"/>
<transition>
<h4 v-show="flag">{{flag}}</h4>
</transition>
  1. 添加过度动画的类名
<style>
.v-enter,
.v-leave-to {
opacity:0;
transform:translateX(100px);
}
.v-enter-active,
.v-leave-active{
transition: all 0.5s ease;
}
</style>

来吧展示:

二、vue结合第三方css动画样式库

animate官网:https://animate.style/

安装

  1. 在官网直接下载文件
  2. 通过 npm 安装
$ npm install animate.css --save

使用

  1. 导入第三方动画样式文件
<link rel="stylesheet" href="../lib/animate.css">
  1. 在vue提供的trisition标签中添加自带的动画入场和出场的属性
  2. 添加animate样式库的动画样式值
  3. 给要做动画的标签(这里是h3)添加animate做动画的类
 <!--    enter-active-class  动画入场的时候的动画类名-->
<!-- leave-active-class动画出场时候的动画类名-->
<transition enter-active-class="animate__bounceInDown" leave-active-class="animate__bounceOutDown">
<h3 v-show="flag" class="animate__animated">哈哈哈哈哈哈哈</h3>
</transition>

来吧展示:

三、动画钩子函数实现小球半场动画

<style>
.ball{
width: 30px;
height: 30px;
background-color: red;
border-radius: 50%;
}
</style>
<body>
<div id="app">
<input type="button" value="加入购物车" @click="flag=!flag"/>
<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter">
<div v-show="flag" class="ball"></div>
</transition>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{
flag:false
},
methods:{
beforeEnter(el){//小球开始动画之前的起始状态
// el标识的是绑定动画的元素这里是小球的<div>
el.style.transform = 'translate(0,0)'
},
enter(el,done){// 小球动画结束之后的结束状态
el.offsetWidth
//el.offsetHeight/el.offsetLeft/el.offsetRight都可以实现动画效果
// 这是固定写法,如果不写 el.offsetWidth 就无法实现动画效果,小球直接到结束状态,中间看不到动画效果
el.style.transform = 'translate(150px,200px)'
el.style.transition = 'all 1s ease'
// 当动画执行完毕后,会自动调用 done 这个函数,这个done 就是 afterEnter 函数的引用
done()
//调这个函数的作用是当小球结束了再次点击加入车能够再次执行动画
},
afterEnter(el){// 小球动画结束之后的回调函数,用来做一些清理工作
// 通过取非的操作,直接让小球跳过了后半场的动画
this.flag = !this.flag
}
}
})
</script>
</body>

来吧展示:

四、列表动画

基本样式:

  <style>
ul {
list-style: none;
padding: 0;
margin: 0;
}
li {
line-height: 30px;
border: 1px dashed #ccc;
margin: 5px;
font-size: 14px;
padding-left: 10px;
width: 500px;
cursor: pointer;
}
li:hover {
background-color: orange;
box-shadow: 0 0 7px gray;
}
</style>
<body>
<div id="app">
<ul>
<li v-for="item in list">{{item.id}} ------ {{item.name}}</li>
</ul>
</div>
<script>
var vm = new Vue({
el:'#app',
data:{
list: [
{ id: 1, name: '黄焖鸡'},
{ id: 2, name: '烤鱼'},
{ id: 3, name: '鸭血粉丝'},
{ id: 4, name: '大碗米线'},
{ id: 5, name: '螺蛳粉'},
{ id: 6, name: '鱼香肉丝'},
]
}
})
</script>
</body>

来吧展示:



实现删除功能

<ul>
<li v-for="(item, i) in list" @click="del(i)">{{item.id}} ------ {{item.name}}
</li>
</ul>
methods:{
del(i){
this.list.splice(i,i)
}
}

来吧展示:

实现删除动画

<style>
.....
.v-enter,
.v-leave-to{
opacity: 0;
transform: translateY(200px);
}
.v-enter-active,
.v-leave-active{
transition: all 0.5s ease;
}
</style>
<div id="app">
<transition-group tag="ul">
<!--因为transition-group默认被渲染的成sapn,但是行内元素不能再套块级元素,不符合css3规范,所以将ul移除,然后给transition-group添加tag="ul"-->
<li v-for="(item, i) in list" :key="item.id" @click="del(i)">{{item.id}} ------ {{item.name}}</li>
<!--在transition-group中被v-for包裹的循环元素必须绑定:key=""属性-->
</transition-group>
</div>

来吧展示:



实现删除列表时,让下面的元素慢慢上去,有过度效果,变得没有那么生硬

<style>
.....
.v-move { /* 让元素被改变定位的时候,有一个缓动的效果 */
transition: all 0.5s ease;
}
.v-leave-active {
position: absolute;
/* 表示要被删除的那个元素, 让即将被移除的元素,脱离标准流
这样,后面的元素就能渐渐的浮动上来了
也就是说页面上的li属于流式布局,那怕做动画效果,li也会占领自己的区域
如果说为将要删除的元素添加position:absolute那么就脱离了标准流,就不会再占位置了
后面的元素就会慢慢票上去 */
}
</style>

来吧展示:



实现添加功能:

<div>
Id:<input type="text" v-model="id">
Name:<input type="text" v-model="name">
<input type="button" value="添加" @click="add">
</div>
data:{
id:'',
name:'',
list: [
......
]
}
add(){
const p = { id: this.id, name: this.name }
//往后追加
this.list.push(p)
//往前追加
//this.list.unshif(p)
this.id = this.name = ''
}

来吧展示:

vue学习笔记(五)---- vue动画的更多相关文章

  1. 【Vue学习笔记】—— vue的基础语法 { }

    学习笔记 作者:oMing vue v-on: 简称 @ <div id='app'> <button v-on:click='Show1'> </button> ...

  2. vue学习笔记(二)vue的生命周期和钩子函数

    前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...

  3. vue学习笔记:vue的认识与特点与获取

    Vue了解 Vue:读作 view Vue是一个渐进式框架 与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整 ...

  4. Vue学习笔记(五)——配置开发环境及初建项目

    前言 在上一篇中,我们通过初步的认识,简单了解 Vue 生命周期的八个阶段,以及可以应用在之后的开发中,针对不同的阶段的钩子采取不同的操作,更好的实现我们的业务代码,处理更加复杂的业务逻辑. 而在这一 ...

  5. vue学习笔记(五)条件渲染和列表渲染

    前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...

  6. Vue学习笔记五:事件修饰符

    目录 什么是事件修饰符 没有事件修饰符的问题 HTML 运行 使用事件修饰符 .stop阻止冒泡 .prevent 阻止默认事件 .capture 添加事件侦听器时使用事件捕获模式 .self 只当事 ...

  7. vue学习笔记(五):对于vuex的理解 + 简单实例

    优点:通过定义和隔离状态管理中的各种概念并强制遵守一定的规则,我们的代码将会变得更结构化且易维护.使用vuex来引入外部状态管理,将业务逻辑切分到组件外,可以避免重复的从服务端抓取数据. 详情请参考官 ...

  8. Vue学习笔记之Vue学习前的准备工作

    0x00 起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐 ...

  9. vue学习笔记—bootstrap+vue用户管理

    vue,读音view,简单易用的前端框架.特点如下: 1.一个mvvm的前端框架,内部做好了html中dom对象和后台用js语言定义的变量的双向绑定 2.中国人尤雨溪维护的个人项目,中文资料多,和go ...

  10. VUE学习笔记之vue cli 构建项目

    一.环境搭建: 1.安装node.js 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了.安装完成之后,打开命令行工具(win+r,然后输入cmd), ...

随机推荐

  1. Java8新特性:函数式编程

    1. 概述 函数式编程学习目的: 能够看懂公司里的代码 大数据量下处理集合效率更高 代码可读性高 消灭嵌套地狱 函数式编程思想: 面向对象思想需要关注用什么对象完成什么事情.而函数式编程思想就类似于我 ...

  2. 【题解】CF1215C Swap Letters

    题面传送门 解决思路 首先容易得知,两个字符串中 \(b\)(或 \(a\)) 的个数为偶数时,一定有解.为奇数则一定无解. 其次考虑怎么交换.对照样例三: in: 8 babbaabb ababab ...

  3. 修复 docker build 错误 "ERROR: No build stage in current context"

    若 docker build 时遇到了错误 "ERROR: No build stage in current context",则有可能是没有将 FROM 命令语句放置在第一行. ...

  4. cookies和session总结

    1.作为基础知识,但是也是容易被我们忽略的知识. 2.从我的一次面试中,面试官问到,session是什么?和cookies有什么关系,当时我以为很简单,便顺口回答到,session是为了解决http无 ...

  5. Android网络请求(1)

    Android网络请求(1) ​ 安卓开发网络请求可谓是安卓开发的灵魂,如果你不会网络请求,那么你开发的应用软件就是一具没有灵魂的枯骨. ​ 在安卓开发中进行网络请求和java中的网络请求有异曲同工之 ...

  6. MinioAPI浅入及问题

    MinioAPI浅入及问题 bucketExists(BucketExistsArgs args) boolean 判断桶是否存在 返回boolean boolean gxshuju = minioC ...

  7. Vue2基本组件间通信

    Vue2组件通信的基础方式 自己的理解:组件化通信,无非就是数据你传我,我传你,两个组件的相互交流,方法很多,下方有图示(此篇建议小白阅读,大神的话也不会看,哈哈哈哈!仅供参考,有不同的意见可以一起交 ...

  8. [论文阅读] 颜色迁移-Correlated Color Space

    [论文阅读] 颜色迁移-Correlated Color Space 文章: Color transfer in correlated color space, [paper], [matlab co ...

  9. PostgreSQL函数:查询包含时间分区字段的表,并更新dt分区为最新分区

    一.需求 1.背景 提出新需求后,需要在www环境下进行验收.故需要将www环境脚本每天正常调度 但由于客户库无法连接,ods数据无法每日取,且连不上客户库任务直接报错,不会跑ods之后的任务 故需要 ...

  10. 【Java进阶】五分钟快速掌握JVM优化概念、常用命令、工具、JUC、多线程、GC等知识

    〇.概述 (一)资料 史上最全最详细的JVM优化方案:http://www.360doc.com/content/22/0513/10/34195792_1031121509.shtml (二)内容概 ...