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到你的实际帧数即可运行。

相关文章
可爱狗狗的404动画HTML源码
可爱狗狗的404动画HTML源码
468 17
可爱狗狗的404动画HTML源码
css3 svg制作404页面动画效果HTML源码
css3 svg制作404页面动画效果HTML源码
294 34
html实现的文字发散动画效果代码
html实现的文字发散动画效果代码
212 30
|
移动开发 HTML5
HTML5 SVG实现可爱的小鸟卡通动画3D特效
HTML5 SVG实现可爱的小鸟卡通动画
262 29
|
移动开发 前端开发 HTML5
基于HTML5+Canvas绘制的鼠标跟随三角形碎片光标动画代码
基于HTML5+Canvas绘制的鼠标跟随三角形碎片光标动画特效代码,很有意思,一团三角形碎片跟随鼠标的移动,不冗长、不笨重,反而有一种很轻盈的感觉,非常不错
240 29
html5+svg太空人404动画模板源码
html5+svg太空人404动画模板源码
233 17
创意滑板动画404错误提示HTML源码
创意滑板动画404错误提示页面HTML源码
404 0
创意滑板动画404错误提示HTML源码
|
移动开发 前端开发 HTML5
Html5 Canvas绘制圆形仪表盘动画源码
Html5 Canvas绘制圆形仪表盘动画特效是一款基于HTML5 Canvas绘制的圆形百分比仪表盘动画特效。
216 1
|
Web App开发 移动开发 前端开发
html5 canvas五彩碎纸屑飘落动画特效
h5 canvas飘落纸片动画是一款实现五彩纸屑飘落的背景动画特效,基于canvas绘制的空中飘落的纸屑片动画特效,适用于网页动态背景效果代码。简单使用,欢迎下载!代码适用浏览器:搜狗、360、FireFox(建议)、Chrome、Safari、Opera、傲游、世界之窗,是一款不错的的特效插件,希望大家喜欢!
263 5
|
前端开发
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
169 0
基于canvas实现的彩色纸屑组成文字3d动画HTML源码