• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > 三分钟HTML5画布(Canvas)动画教程 - CSDN博客

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML5教程,HTML5中国,三分钟HTML5画布(Canvas)动画教程,html5cn,html5资料,html5等相关知识,匿名希望在学习及工作中可以帮助到您

此文下面的教程中将使用的是另外一个叫做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和css3动画排列人物头像的实例演示
  • html5教程调用绘图api画简单的圆形代码分享
  • html5教程画矩形代码分享
  • html5教程制作简单画板代码分享
  • html5基础教程常用技巧整理
  • html5教程-Canvas入门
  • html5教程画矩形代码分享
  • HTML5晃动DeviceMotionEvent事件
  • HTML5教程之html 5 本地数据库(Web Sql Database)
  • HTML5中对contenteditable属性的解释与规定

相关文章

  • 2018-12-03html5新机制:postMessage实现安全跨域通信(代码)
  • 2018-12-03这两个js有冲突吗?
  • 2018-12-03本人想去培训机构学习编程,培训html5 还是 ios 还是安卓好呢?
  • 2018-12-03教你一个快速建站的技巧
  • 2017-08-06实例讲解HTML5的meta标签的一些应用
  • 2018-12-03Html5拖放的实现方法
  • 2017-08-06详解HTML5中div和section以及article的区别
  • 2018-12-03详解html5图片上传支持图片预览压缩及进度显示兼容IE6及标准浏览器
  • 2018-12-03html5表单及新增的改良元素详解
  • 2018-12-03jQuery+JSONP跨域需要怎样实现

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • HTML5加载时的等待动画效果制作
    • html5大文件上传技术分享
    • 使用HTML5 Canvas为图片填充颜色和纹理的教程
    • HTML5Canvas的讲解以及实例教程
    • html5中文件域+FileReader分段读取文件并上传到服务器的案例
    • 如何配置H5的滚动条样式的代码
    • 详解H5新属性audio音频和video视频的控制代码实例
    • HTML5 CANVAS:绘制阴影和填充模式
    • HTML5拖放关于API实现拖放排序的实例代码
    • 浅谈HTML5新增及移除的元素

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有