HTML5 Canvas动画效果演示

简介: HTML5 Canvas动画效果演示

HTML5 Canvas动画效果演示

主要思想:

首先要准备一张有连续帧的图片,然后利用HTML5 Canvas的draw方法在不同的时间

间隔绘制不同的帧,这样看起来就像动画在播放。

关键技术点:

JavaScript 函数setTimeout()有两个参数,第一个是参数可以传递一个JavaScript方法,


另外一个参数代表间隔时间,单位为毫秒数。代码示例:


setTimeout( update, 1000/30);


Canvas的API-drawImage()方法,需要指定全部9个参数:


ctx.drawImage(myImage, offw, offh, width,height, x2, y2, width, height);


其中offw, offh是指源图像的起始坐标点,width, height表示源图像的宽与高,x2,y2表


示源图像在目标Canvas上的起始坐标点。

一个22帧的大雁飞行图片实现的效果:

源图像:


程序代码:


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="chrome=IE8">
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Canvas Mouse Event Demo</title>
<link href="default.css" rel="stylesheet" />
  <script>
    var ctx = null; // global variable 2d context
    var started = false;
    var mText_canvas = null;
    var x = 0, y =0;
    var frame = 0; // 22 5*5 + 2
    var imageReady = false;
    var myImage = null;
    var px = 300;
    var py = 300;
    var x2 = 300;
    var y2 = 0;
    window.onload = function() {
      var canvas = document.getElementById("animation_canvas");
      console.log(canvas.parentNode.clientWidth);
      canvas.width = canvas.parentNode.clientWidth;
      canvas.height = canvas.parentNode.clientHeight;
      
      if (!canvas.getContext) {
          console.log("Canvas not supported. Please install a HTML5 compatible browser.");
          return;
      }
      
      // get 2D context of canvas and draw rectangel
      ctx = canvas.getContext("2d");
      ctx.fillStyle="black";
      ctx.fillRect(0, 0, canvas.width, canvas.height);
      myImage = document.createElement('img');
      myImage.src = "../robin.png";
      myImage.onload = loaded();
    }  
    
    function loaded() {
        imageReady = true;
        setTimeout( update, 1000/30);
    }
    
    function redraw() {
      ctx.clearRect(0, 0, 460, 460)
      ctx.fillStyle="black";
      ctx.fillRect(0, 0, 460, 460);
      
      // find the index of frames in image
      var height = myImage.naturalHeight/5;
      var width = myImage.naturalWidth/5;
      var row = Math.floor(frame / 5);
      var col = frame - row * 5;
      var offw = col * width;
      var offh = row * height;
      
      // first robin
      px = px - 5;
      py = py - 5;
      if(px < -50) {
        px = 300;
      }
      if(py < -50) {
        py = 300;
      }
      
      //var rate = (frame+1) /22;
      //var rw = Math.floor(rate * width);
      //var rh = Math.floor(rate * height);
      ctx.drawImage(myImage, offw, offh, width, height, px, py, width, height);
      
      // second robin     
      x2 = x2 - 5;
      y2 = y2 + 5;
      if(x2 < -50) {
        x2 = 300;
        y2 = 0;
      }
      ctx.drawImage(myImage, offw, offh, width, height, x2, y2, width, height);
      
    }
    
    function update() {
        redraw();
        frame++;
        if (frame >= 22) frame = 0;
        setTimeout( update, 1000/30);
    }
    
  </script>
</head>
<body>
  <h1>HTML Canvas Animations Demo - By Gloomy Fish</h1>
  <pre>Play Animations</pre>
  <div id="my_painter">
    <canvas id="animation_canvas"></canvas>
  </div>
</body>
</html>

发现上传透明PNG格式有点问题,所以我上传

不透明的图片。可以用其它图片替换,替换以后

请修改最大帧数从22到你的实际帧数即可运行。

相关文章
|
18天前
|
Web App开发 移动开发 前端开发
html5 canvas五彩碎纸屑飘落动画特效
h5 canvas飘落纸片动画是一款实现五彩纸屑飘落的背景动画特效,基于canvas绘制的空中飘落的纸屑片动画特效,适用于网页动态背景效果代码。简单使用,欢迎下载!代码适用浏览器:搜狗、360、FireFox(建议)、Chrome、Safari、Opera、傲游、世界之窗,是一款不错的的特效插件,希望大家喜欢!
34 5
|
29天前
|
前端开发
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
24 0
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
|
29天前
|
移动开发 前端开发 HTML5
HTML5 Canvas制作的粒子十秒倒计时源码
一段基于HTML5 Canvas制作的粒子爆炸,十秒数字倒计时,全屏倒计时动画效果,给人一种非常大气的视觉感
33 0
HTML5 Canvas制作的粒子十秒倒计时源码
|
1月前
html实现的破碎拼接文字动画特效代码
html实现的破碎拼接文字动画特效代码是一段会自动产生文字依次破碎再拼接的效果,非常的炫。欢迎对此段代码感兴趣的朋友前来下载使用。
30 1
|
1月前
|
前端开发 JavaScript
Canvas三维变化背景动画HTML源码
Canvas三维变化背景动画HTML源码
34 5
|
3月前
|
XML 移动开发 前端开发
HTML5 SVG和canvas的性能探讨
HTML5 中的 SVG(可缩放矢量图形)和 Canvas(画布)分别用于网页图形绘制。SVG 基于矢量图形,使用 XML 描述,适合静态或少量动态内容(如图标、图表),易于编辑且保持高分辨率;Canvas 则基于位图,通过 JavaScript 绘制,更适合快速更新大量图形的场景(如游戏、动态动画),但在复杂图形计算时可能遇到性能瓶颈。总体而言,SVG 适用于静态和少量动态内容,而 Canvas 更适合高频率更新和性能要求高的场景。
|
3月前
|
移动开发 前端开发 数据挖掘
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
|
28天前
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
56 7