说到动画,其实不少人心中都会有一种抵触的情绪 老是认为动画并非项目内须要的。而且动画也不必定是项目内必须的东西,因此不少人并非很在乎这个玩意儿。可是我想说的是:区别一我的的价值并非在完成项目的能力,而是将项目优化的程度。而动画正式如此,他并非你的必须品 可是能让你的能力更上一个台阶。javascript
说到动画,在不少的眼里 都会认为动画是一个无关紧要的东西。由于在不少程序员的平常开发中,动画基本都是没有被用到的。咱们这里来谈到动画会不会有点多余呢?css
正如我前面说到,动画并非项目中的必需品,但倒是项目的润滑剂。由于它能很大程度上能加强用户的体验。说了这么多,究竟动画是什么呢?html
动画是使元素从一种样式逐渐变化为另外一种样式的效果。而且动画可以改变任意多的样式任意多的次数。前端
怎么理解这句话呢?就直接从动画的属性开始提及吧。vue
前面一个小节,简单介绍了一下动画到底是什么。这章我就用动画的api来说讲解一下动画的定义。首先来看下面一段代码:java
// css
@keyframes move {
from {
top:0px;
}
to{
top: 20px
}
}
.test {
width: 10px;
height: 10px;
background-color: red;
animation-name: move;
animation-duration: 3s;
position:relative;
}
// html
<div class="test"></div>
复制代码
效果以下: git
从上面的效果图咱们能够发现:本来静止的组件运动了起来。首先咱们来谈一谈其中用到动画的属性值:程序员
@keyframes animationname {keyframes-selector {css-styles;}}
复制代码
再一看下面的两个属性:animation-name和animation-duration。其含义分别表明动画的名称和一组动画完成的时间。从这两个命名的规则是否是让咱们想起了以前讲过的过渡呢?github
我想说是的:不只这两个属性的含义和过渡中的两个属性相似,而且还包含过渡中的另外两个属性:ajax
以上这四个属性的含义和使用的方法和前面一篇文章的过渡用法相似,这里我就很少加赘述了。那么既然这里都说了,动画的效果和过渡差很少 那么咱们为何还要花费心思来创造出动画呢?来仔细看我细细为您讲解出来吧,首先来看下面一段代码:
@keyframes move {
0% {
top:0px;
}
25%{
top: 20px
}
50% {
top: 40px
}
75% {
top: 20px
}
100% {
top:0;
}
}
.test {
width: 20px;
height: 20px;
background-color: red;
}
.test:hover{
animation-name: move;
animation-duration: 3s;
animation-iteration-count: infinite;
animation-timing-function: linear;
position:relative;
}
复制代码
效果以下:
再来看一段代码:
@keyframes move {
0% {background:red; left:0px; top:0px;}
25% {background:yellow; left:40px; top:0px;}
50% {background:blue; left:40px; top:40px;}
75% {background:green; left:0px; top:40px;}
100% {background:red; left:0px; top:0px;}
}
.test {
width: 20px;
height: 20px;
background-color: red;
}
.test:hover {
animation-name: move;
animation-duration: 1s;
animation-iteration-count: infinite;
animation-timing-function: linear;
animation-direction:alternate;
position:relative;
}
复制代码
效果以下:
从上面的效果咱们能够清楚的发现:animation-direction能够用来定义奇数次是否应该轮流反向播放动画。
咱们再来看一个代码:
@keyframes move {
0% {left:0px;}
100% {left:60px;}
}
.runner {
width: 20px;
height: 20px;
animation-name: move;
animation-iteration-count: 1;
animation-timing-function: linear;
position: absolute;
}
.user1 {
background: red;
animation-duration: 1s;
}
.user2 {
background:black;
animation-duration: 1s;
animation-fill-mode: forwards;
top:30px;
}
.user3 {
background:red;
animation-duration: 1s;
animation-iteration-count: infinite;
top:60px;
}
.playground {
position: relative;
height: 90px;
}
.stop {
animation-play-state:paused;
}
<div class="playground">
<div class=" runner user1"></div>
<div class=" runner user2"></div>
<div id=user3 class=" runner user3"></div>
</div>
<button id="test_btn" onclick="myBtnClick()">暂停</button>
<script type="text/javascript">
function myBtnClick(){
document.getElementById("user3").classList.add("stop")
}
</script>
复制代码
效果以下:
从上面的现象能够发现:animation-fill-mode能够更改动画完成时的位置,而animation-play-state能中止动画,下面咱们来用书面语言描述一下:
这里值得说明的是:animation-fill-mode有四个可选值: 一、 none 不改变默认行为。 二、 forwards 当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)。 三、 backwards 在 animation-delay 所指定的一段时间内,在动画显示以前,应用开始属性值(在第一个关键帧中定义)。 四、 both 向前和向后填充模式都被应用。
前面一节基本都将动画的效果都简单的阐述了一遍,可是对于那种初学者来讲,在学习的时候基本一学就懂,可是应用的时候就不怎么会,难如下手。针对这种问题,做为程序员第件事儿就是应该想到的就是:从模仿中学习。
怎么理解从模仿中学习呢?在刚开始学习某项技术的时候,咱们应该去读一下同类技术比较成熟的写法。从模仿到使用,再进行改装。
在这里,我就给你们介绍一个比较好的库:animate.css。为何介绍这个库呢?由于它里面就涵盖了大多数的动画效果,而且源码也是能够下载的。咱们能够经过使用它的效果来熟悉动画,学习动画等等。
该如何来使用他呢?来看下面一段代码,说一下它的常规使用方法:
// 引入animate.css
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.0/animate.min.css">
.test {
width: 100px;
height: 100px;
background: red;
margin: 100px;
}
.test:hover {
animation: wobble 1s;
}
<div class="test" ></div>
复制代码
效果以下:
animation: name duration timing-function delay iteration-count direction fill-mode;
复制代码
我这里呢?就简单的介绍了animate.css中的一个动画效果,具体的还有更多,官网也有效果 有兴趣的能够学习一下。
前面谈到了动画的普通用法,那么做为一个vue框架的使用者,就不得不提到动画在vue中的应用了。首先咱们在介绍使用动画的使用以前,咱们首先介绍一个vue中特有的标签transition,该标签能够给
任意一种状况添加过渡/动画效果。 来看下面一段代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>动画</title>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.0/animate.min.css">
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.9/dist/vue.js"></script>
<style type="text/css">
.area{
width: 100px;
height: 100px;
}
.red {
background: red;
}
.yellow{
background-color: yellow;
}
.fade-enter-active, .fade-leave-active {
transition: opacity .5s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
</style>
</head>
<body>
<div id="app" >
<button @click="isSelect=!isSelect">{{isSelect?'红色':'黄色'}}</button>
<transition-group name="fade">
<div class="area red" v-if="isSelect" key="red"></div>
<div class="area yellow" key="yellow" v-else></div>
</transition-group>
</div>
<script type="text/javascript">
new Vue({
el:'#app',
data:{
isSelect:false
},
methods:{
}
})
</script>
</body>
</html>
复制代码
效果为:
transition的含义是:当存在transition
组件内的节点被插入或删除的时候,vue会作以下处理:
在过渡动画中,存在下面六个属性值
一、 v-enter:定义进入过渡的开始状态。在元素被插入以前生效,在元素被插入以后的下一帧移除。 二、 v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入以前生效,在过渡/动画完成以后移除。这个类能够被用来定义进入过渡的过程时间,延迟和曲线函数。 三、 v-enter-to: 2.1.8版及以上 定义进入过渡的结束状态。在元素被插入以后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成以后移除。 四、 v-leave: 定义离开过渡的开始状态。在离开过渡被触发时马上生效,下一帧被移除。 五、 v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时马上生效,在过渡/动画完成以后移除。这个类能够被用来定义离开过渡的过程时间,延迟和曲线函数。 六、 v-leave-to: 定义离开过渡的结束状态。在离开过渡被触发以后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成以后移除。 这里值得咱们注意的点是,若是在transition中没有设置name的时候,默认是v-开头,若是设置了name 正如前面fade同样,其中的类名就会演变成fade-开头。
前面既然说了这么多vue中使用动画的基础(咱们这里主要是来复习动画的,vue的知识就不过多的来复习了),那么咱们如何在vue去使用animate.css呢?来看下面一段代码:
<div id="app" >
<button @click="isSelect=!isSelect">点击</button>
<transition enter-active-class="animated bounceIn"
leave-active-class="animated rotateOut">
<div class="area red" v-if="isSelect"></div>
</transition>
</div>
复制代码
效果以下:
动画实际上是很是重要的,他能给用户一种很是温馨的体验,能够很大程度上面增长用户的体验,因此我建议仍是要多在项目中适当的增长动画。另外,我在最后给你们提到了animate.css--一个很优秀的动画库。我提到这个库不是想说 让大家找到了一个比较好偷懒的办法,而是想让你能从使用中淬炼技术,学习他的用法、兼容语法,从而将动画达到融会贯通的地步。
最近一直在从头开始复习前端、Android这两块知识点。忽然感受要复习的点真的有好多,而后本身仍是好菜呀!