介绍动画图像
动画是指一系列的图像在一定的时间间隔内快速播放,从而形成连续变化的效果。动画可以借助于HTML和CSS来创建,HTML5还支持用JavaScript来控制动画,这使得创建动画变得更为简单和灵活。
使用CSS动画
CSS动画是利用CSS中的transition和animation属性来实现,transition属性可以让元素在改变样式时平滑过渡,animation属性可以让元素按照一定的规律进行运动或改变样式。
transition属性
transition属性可以控制元素在改变样式时的过渡效果,它的语法如下:
transition: property duration timing-function delay;
其中:
property:要改变的样式属性,比如background-color、opacity等。
duration:过渡时间,可以指定秒数或毫秒数,比如1s、500ms等。
timing-function:过渡的时间函数,可以指定ease、linear、ease-in、ease-out、ease-in-out等。
delay:过渡延迟时间,可以指定秒数或毫秒数。
下面是一个例子,当鼠标悬停在按钮上时,按钮的背景色将在1秒内从白色变为蓝色:
<style>
button {
background-color: white;
border: none;
padding: 10px;
cursor: pointer;
transition: background-color 1s;
}
button:hover {
background-color: blue;
}
</style>
<button>点击我</button>
在这个例子中,我们先将按钮的背景色设置为白色,然后给按钮添加了一个过渡属性transition,指定要过渡的样式属性是background-color,过渡时间是1秒,过渡时间函数是默认值ease,过渡延迟时间是0秒。当鼠标悬停在按钮上时,按钮的背景色就会从白色变为蓝色,过程会平滑进行,这正是transition属性所实现的效果。
animation属性
animation属性可以控制元素按照一定的规律进行运动或改变样式,它的语法如下:
animation: name duration timing-function delay iteration-count direction fill-mode play-state;
其中:
name:动画的名称,可以用@keyframes规则定义。
duration:动画的持续时间,可以指定秒数或毫秒数。
timing-function:动画的时间函数,可以指定ease、linear、ease-in、ease-out、ease-in-out等。
delay:动画的延迟时间,可以指定秒数或毫秒数。
iteration-count:动画的播放次数,可以指定具体数值或infinite表示无限次。
direction:动画的播放方向,可以指定normal、reverse、alternate、alternate-reverse等。
fill-mode:动画结束后元素的样式状态,可以指定none、forwards、backwards、both等。
play-state:动画的播放状态,可以指定paused或running。
下面是一个例子,实现了一个简单的旋转效果:
<style>
@keyframes rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
img {
animation: rotate 2s linear infinite;
}
</style>
<img src="image.gif">
在这个例子中,我们用@keyframes规则定义了一个名为rotate的动画,指定了从0度旋转到360度的效果。然后将这个动画应用到了一个图片上,使图片按照这个规律进行无限次的旋转,且旋转时间为2秒,时间函数为linear,动画延迟时间为0秒。这种效果正是animation属性所实现的。
使用JavaScript控制动画
与CSS动画不同的是,JavaScript动画可以更为灵活地控制元素的样式和位置,但同时也复杂度更高。对于一些需要动态生成的元素,或者需要根据用户事件或数据变化来进行动画的场景,JavaScript动画则是必不可少的工具。
下面介绍一个常用的JavaScript动画库TweenMax,它可以帮助我们更为方便地实现复杂的动画效果。
安装TweenMax
在使用TweenMax之前,需要先下载并安装它。可以从官网https://greensock.com/tweenmax/上下载最新版的TweenMax,解压后将其保存至项目目录中。
/project
├── index.html
├── script.js
└── gsap
├── TweenMax.min.js
├── CSSRulePlugin.min.js
├── EaselPlugin.min.js
├── ScrollToPlugin.min.js
└── ...
下载完成后,在HTML文件中引入TweenMax库:
<head>
<script src="gsap/TweenMax.min.js"></script>
</head>
基本动画效果
接下来我们看一个TweenMax的例子:
<div id="box"></div>
<script>
var box = document.querySelector("#box");
TweenMax.to(box, 2, {left:"200px", backgroundColor:"#ff0000"});
</script>
在这个例子中,我们先创建了一个id为box的div元素,然后通过querySelector方法获取到这个元素。
接着利用TweenMax的to方法,告诉它要对这个box元素进行动画效果,动画持续时间是2秒,从原来的位置移动到left为200px的位置,同时背景色也会变为红色。可以看到,TweenMax库让我们可以非常便捷地实现了一个移动和变色的动画效果。
使用缓动函数
TweenMax还提供了多种缓动函数,可以让动画实现更多样的效果。以下是一些常见的缓动函数:
Linear
Power0
Power1
Power2
Power3
Power4
Back
Bounce
Circ
Cubic
Elastic
Expo
Quad
Quart
Quint
Sine
下面是一个例子,利用缓动函数实现一个弹跳效果:
<style>
#box {
width: 100px;
height: 100px;
border-radius: 50%;
background-color: #0000ff;
position: absolute;
top: 0;
left: 0;
}
</style>
<div id="box"></div>
<script>
var box = document.querySelector("#box");
TweenMax.to(box, 2, {top:"400px", ease:Bounce.easeOut});
</script>
在这个例子中,我们利用TweenMax的Bounce缓动函数来实现了一个弹跳效果,当box元素移动到400px位置时,会受到Bounce.easeOut函数的影响,产生弹跳效果。
完成时的回调函数
利用TweenMax可以在动画结束时执行回调函数,以下是一个例子:
<style>
#box {
width: 100px;
height: 100px;
border-radius: 50%;
background-color: #0000ff;
position: absolute;
top: 0;
left: 0;
}
</style>
<div id="box"></div>
<script>
var box = document.querySelector("#box");
TweenMax.to(box, 2, {top:"400px", onComplete:complete});
function complete() {
console.log("动画已结束");
}
</script>
在这个例子中,我们用TweenMax的onComplete属性来指定动画完成时要执行的回调函数,当box元素移动到400px位置时,动画就会结束,同时执行complete函数。
循环播放
TweenMax还可以实现动画的循环播放,以下是一个例子:
<style>
#box {
width: 100px;
height: 100px;
border-radius: 50%;
background-color: #0000ff;
position: absolute;
top: 0;
left: 0;
}
</style>
<div id="box"></div>
<script>
var box = document.querySelector("#box");
var tl = new TimelineMax({repeat:-1, repeatDelay:1});
tl.to(box, 1, {top:"400px"});
tl.to(box, 1, {left:"400px"});
tl.to(box, 1, {top:"0px"});
tl.to(box, 1, {left:"0px"});
</script>
在这个例子中,我们创建了一个TimelineMax对象tl,并将repeat属性设为-1,表示无限循环播放;repeatDelay属性设为1秒,表示每次循环的延迟时间为1秒。
然后我们通过tl的to方法,依次将box元素向下、向右、向上、向左移动,这样便形成了一个无限循环的移动效果。
总结
CSS和JavaScript都可以实现动画效果,其中通过CSS实现的动画简单易用,适合一些基本的动画效果;而通过JavaScript实现动画更为灵活,适合用户交互效果和需要实时调整样式的情况。TweenMax是常用的JavaScript动画库之一,可帮助我们更加便捷地实现各种复杂的动画效果。