最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

三分钟HTML5画布(Canvas)动画教程-CSDN博客

来源:动视网 责编:小采 时间:2020-11-27 15:16:46
文档

三分钟HTML5画布(Canvas)动画教程-CSDN博客

三分钟HTML5画布(Canvas)动画教程-CSDN博客:此文下面的教程中将使用的是另外一个叫做kinetic的Web动画工具包。它们都是开源的。把鼠标放到上面的小丑脸上,然后移开,就会有如下效果。 第一步,画五官这个小丑没有耳朵和眉毛,所以只剩下三官,但它的两个眼睛我们要分别绘制,所以一共是四个部分。下面
推荐度:
导读三分钟HTML5画布(Canvas)动画教程-CSDN博客:此文下面的教程中将使用的是另外一个叫做kinetic的Web动画工具包。它们都是开源的。把鼠标放到上面的小丑脸上,然后移开,就会有如下效果。 第一步,画五官这个小丑没有耳朵和眉毛,所以只剩下三官,但它的两个眼睛我们要分别绘制,所以一共是四个部分。下面


此文下面的教程中将使用的是另外一个叫做kinetic的Web动画工具包。它们都是开源的。

把鼠标放到上面的小丑脸上,然后移开,就会有如下效果。

第一步,画五官

这个小丑没有耳朵和眉毛,所以只剩下三官,但它的两个眼睛我们要分别绘制,所以一共是四个部分。下面先看看代码。

绘制左眼的代码

var leftEye = new Kinetic.Line({
 x: 150,
 points: [0, 200, 50, 190, 100, 200, 50, 210],
 tension: 0.5,
 closed: true,
 stroke: 'white',
 strokeWidth: 10 
 });

绘制右眼的代码

var rightEye = new Kinetic.Line({
 x: sw - 250,
 points: [0, 200, 50, 190, 100, 200, 50, 210],
 tension: 0.5,
 closed: true,
 stroke: 'white',
 strokeWidth: 10 
 });
绘制鼻子的代码var nose = new Kinetic.Line({
 points: [240, 280, sw/2, 300, sw-240,280],
 tension: 0.5,
 closed: true,
 stroke: 'white',
 strokeWidth: 10
 });

绘制嘴巴的代码

var mouth = new Kinetic.Line({
 points: [150, 340, sw/2, 380, sw - 150, 340, sw/2, sh],
 tension: 0.5,
 closed: true,
 stroke: 'red',
 strokeWidth: 10
 });

简单讲解一下上面的代码。Kinetic就是我们使用的js工具包。在页面的头部,我们需要这样引用它:

<script type="text/javascript" src="/js/kineticv5.0.1.min.js"></script>

其它几个分别是几个关键点,线条弹性,颜色,宽度等。这些都很容易理解。

第二步,让图动起来

这个动画之所以能吸引人,是因为它能响应你的鼠标动作,和用户有互动,这是一个成功的动画最关键的地方。如果你仔细观察,这个小丑五官的变化只是形状的变化,眼睛变大,嘴巴变大,鼻子变大,但特别的是这个变化不是瞬间变化,而是有过渡性的,这里面有一些算法,这就是最让人发愁的地方。幸运的是,这算法技术都非常的成熟,不需要我们来思考,在这些动画引擎库里都把这些技术封装成了非常简单方便的接口。下面我们来看看如何让动起来。

左眼的动画

var leftEyeTween = new Kinetic.Tween({
 node: leftEye,
 duration: 1,
 easing: Kinetic.Easings.ElasticEaseOut, y: -100,
 points: [0, 200, 50, 150, 100, 200, 50, 200]
 });

右眼的动画

var rightEyeTween = new Kinetic.Tween({
 node: rightEye,
 duration: 1,
 easing: Kinetic.Easings.ElasticEaseOut, y: -100,
 points: [0, 200, 50, 150, 100, 200, 50, 200]
 });

鼻子的动画

var noseTween = new Kinetic.Tween({
 node: nose,
 duration: 1,
 easing: Kinetic.Easings.ElasticEaseOut, y: -100,
 points: [220, 280, sw/2, 200, sw-220,280]
 });

嘴巴的动画

var mouthTween = new Kinetic.Tween({
 node: mouth,
 duration: 1,
 easing: Kinetic.Easings.ElasticEaseOut,
 points: [100, 250, sw/2, 250, sw - 100, 250, sw/2, sh-20]
 });

这些代码非常的简单,而且变量名能自释其意。稍微有点经验的程序员想看懂这些代码应该不难。基本每段代码都是让你提供一些点,指定动画动作的衰退模式和持续时间。

完整的动画代码

<!DOCTYPE HTML><html>
 <head>
 <style>
 body { margin: 0px; padding: 0px; }
 #container { background-color: black; }
 </style>
 </head>
 <body>
 <p id="container"></p>
 <script src="/js/lib/kinetic-v5.0.1.min.js"></script>
 <script defer="defer">
 var sw = 578; var sh = 400; var stage = new Kinetic.Stage({
 container: 'container',
 width: 578,
 height: 400
 }); var layer = new Kinetic.Layer({
 y: -30 
 }); var leftEye = new Kinetic.Line({
 x: 150,
 points: [0, 200, 50, 190, 100, 200, 50, 210],
 tension: 0.5,
 closed: true,
 stroke: 'white',
 strokeWidth: 10 
 }); var rightEye = new Kinetic.Line({
 x: sw - 250,
 points: [0, 200, 50, 190, 100, 200, 50, 210],
 tension: 0.5,
 closed: true,
 stroke: 'white',
 strokeWidth: 10 
 }); var nose = new Kinetic.Line({
 points: [240, 280, sw/2, 300, sw-240,280],
 tension: 0.5,
 closed: true,
 stroke: 'white',
 strokeWidth: 10
 }); var mouth = new Kinetic.Line({
 points: [150, 340, sw/2, 380, sw - 150, 340, sw/2, sh],
 tension: 0.5,
 closed: true,
 stroke: 'red',
 strokeWidth: 10
 });

 layer.add(leftEye)
 .add(rightEye)
 .add(nose)
 .add(mouth);

 stage.add(layer); // tweens

 var leftEyeTween = new Kinetic.Tween({
 node: leftEye,
 duration: 1,
 easing: Kinetic.Easings.ElasticEaseOut,
 y: -100,
 points: [0, 200, 50, 150, 100, 200, 50, 200]
 }); 

 var rightEyeTween = new Kinetic.Tween({
 node: rightEye,
 duration: 1,
 easing: Kinetic.Easings.ElasticEaseOut,
 y: -100,
 points: [0, 200, 50, 150, 100, 200, 50, 200]
 }); var noseTween = new Kinetic.Tween({
 node: nose,
 duration: 1,
 easing: Kinetic.Easings.ElasticEaseOut,
 y: -100,
 points: [220, 280, sw/2, 200, sw-220,280]
 }); 

 var mouthTween = new Kinetic.Tween({
 node: mouth,
 duration: 1,
 easing: Kinetic.Easings.ElasticEaseOut,
 points: [100, 250, sw/2, 250, sw - 100, 250, sw/2, sh-20]
 }); 

 stage.getContainer().addEventListener('mouseover', function() {
 leftEyeTween.play();
 rightEyeTween.play();
 noseTween.play();
 mouthTween.play();
 });

 stage.getContainer().addEventListener('mouseout', function() {
 leftEyeTween.reverse();
 rightEyeTween.reverse();
 noseTween.reverse();
 mouthTween.reverse();
 }); </script>
 </body></html>

我相信你已经在3三分钟内看完并看懂了这个动画的制作过程和原理。当然,这个动画很简单,我们这里只是粗浅的讲解一些HTML5画布(Canvas)动画技术的皮毛。如果想真正的成为Web动画告诉,那你还需要做很多的努力。但如果你只是业余爱好,我相信这已经足够让你骄傲了。

文档

三分钟HTML5画布(Canvas)动画教程-CSDN博客

三分钟HTML5画布(Canvas)动画教程-CSDN博客:此文下面的教程中将使用的是另外一个叫做kinetic的Web动画工具包。它们都是开源的。把鼠标放到上面的小丑脸上,然后移开,就会有如下效果。 第一步,画五官这个小丑没有耳朵和眉毛,所以只剩下三官,但它的两个眼睛我们要分别绘制,所以一共是四个部分。下面
推荐度:
标签: 教程 动画 html5
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top