Vue学习之动画小结(六)
程序员文章站
2023-01-01 13:06:35
一、Vue中实现动画的方式:https://cn.vuejs.org/v2/guide/transitions.html Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 A ......
一、vue中实现动画的方式:
vue 在插入、更新或者移除 dom 时,提供多种不同方式的应用过渡效果。
包括以下工具:
- 在 css 过渡和动画中自动应用 class
- 可以配合使用第三方 css 动画库,如 animate.css
- 在过渡钩子函数中使用 javascript 直接操作 dom
- 可以配合使用第三方 javascript 动画库,如 velocity.js
二、使用过渡类名实现动画:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width= , initial-scale=1.0" /> <meta http-equiv="x-ua-compatible" content="ie=edge" /> <title>donghua</title> <link rel="stylesheet" href="./lib/animate.css" /> <style> /* 2.自定义两组样式,来控制 transition 内部的元素实现动画 */ /* v-enter【这是一个时间点】是进入之前,元素的起始状态,此时还没有开始进入 */ /* v-leave-to 【这是一个时间点】 是动画离开之后,离开的终止状态,此时,元素 动画已经结束了*/ .v-enter, .v-leave-to { opacity: 0; /* 沿着x轴 */ /* transform: translatex(150px); */ /* 沿着y轴 */ transform: translatey(150px); } /*v-enter-active【入场动画的时间段】 */ /* v-leave-active【离场动画的时间段】 */ .v-enter-active, .v-leave-active { transition: all 0.8s ease; } </style> </head> <body> <script src="./lib/vue.js"></script> <div id="app"> <input type="button" value="toggle" @click="flag=!flag" /> <!-- 需求:点击按钮,让h3显示,再点击,让h3隐藏 --> <!-- 1、使用 transition 元素,把需要被动画控制的元素,包裹起来 --> <transition> <h3 v-if="flag">这是一个h3</h3> </transition> </div> <script> var vm = new vue({ el: "#app", data: { flag: false } }); </script> </body> </html>
三、使用animate.css类实现动画:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width= , initial-scale=1.0" /> <meta http-equiv="x-ua-compatible" content="ie=edge" /> <title>donghua</title> <link rel="stylesheet" href="./lib/animate.css" /> </head> <body> <script src="./lib/vue.js"></script> <div id="app"> <input type="button" value="toggle" @click="flag=!flag" /> <!-- 使用 :duration="{ enter :200, leave: 400}"来分别设置 入场的时长和 离场的时长 --> <transition enter-active-class="bouncein" leave-active-class="bounceout" :duration="{ enter :200, leave: 400}" > <h3 v-if="flag" class="animated">这是一个h3</h3> </transition> </div> <script> var vm = new vue({ el: "#app", data: { flag: false } }); </script> </body> </html>
四、使用钩子函数:
可以在属性中声明 javascript 钩子
<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <title>donghua</title> <style> /* 定义动画小球 */ .ball { width: 15px; height: 15px; border-radius: 50%; background-color: red; } </style> </head> <body> <script src="./lib/vue.js"></script> <div id="app"> <input type="button" value="从碗里出去" @click="flag=!flag" /> <!-- 1.使用 transition 元素把 小球包裹起来 --> <transition @before-enter="beforeenter" @enter="enter" @after-enter="afterenter" > <div class="ball" v-show="flag"></div> </transition> </div> <script> var vm = new vue({ el: "#app", data: { flag: false }, methods: { //动画钩子函数的第一个参数:el,表示 要执行动画的那个dom元素,是个原生的js dom对象 //大家可以认为,el是通过docunment.getelementbyid('')方式获取到的原生js dom对象 beforeenter(el) { //beforeenter 表示动画入场之前,此时,动画尚未开始,可以在其中设置元素开始动画之前的起始样式 // 设置小球开始动画之前的起始位置 el.style.transform = "translate(0,0)"; }, enter(el, done) { // 这句话没有实际的作用,但是如果不写,出不来动画效果; //可以认为 el.offsetwidth 会强制动画刷新 el.offsetwidth; //enter 表示动画开始之后的样式,这里,可以设置小球完成动画之后的,结束状态 el.style.transform = "translate(150px,450px)"; el.style.transition = "all 1s ease"; //这里的 done,起始就是 afterenter 这个函数,也就是说 done 是 afterenter 函数的引用 done(); }, afterenter(el) { //动画完成后,会调用 afterenter // console.log("ok"); //这句话,第一个功能就是控制小球的显示与隐藏; //第二个功能:直接跳过后半场动画,让flag 标识符 直接变为 false; //当第二次再点击 按钮的时候,flag: false---> true this.flag = !this.flag; //vue把一个完整的动画,使用钩子函数,拆分为了两部分: //我们使用flag 标识符,来表示动画的切换flag: false--> true -->false } } }); </script> </body> </html>
<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>
上一篇: Vue学习之生命周期钩子小结(四)
下一篇: Vue学习之Webpack小结(十二)