技术开发 频道

HTML5新特性开发者实践之Canvas线条篇

  同样,要将video结合canvas使用的话,首先要创建HTM5中的标签元素,关于HTML5的新的标签,可以参考下文去详细学习。下面代码中并没将video标签嵌入到canvas画布中:

  然后我们写一个简单的脚本,实现的功能是将video标签嵌入到画布中,

var canvas = function () {

  return {

  draw:
function () {

  var video
= document.getElementById(“myVideo”);

  var canvas
= document.getElementById(“myCanvas”);

  var context
= canvas.getContext(“2d”);

  var width
= Math.floor(canvas.clientWidth / 100);

  var height
= Math.floor(canvas.clientHeight / 100);

  canvas.width
= width; canvas.height = height;

  video.play();

  context.drawImage(video,
0, 0, width, height);

  },

  init:
function () {

  setInterval(canvas.draw,
16);

  }

  }

  } ();

  实现的效果是在屏幕中显示一个video播放器,播放一段动画,而同时画布的背景也是同步这段动画。具体的效果请看这个地址:http://msdeploy.net/IE9/Canvas/video.htm

  形状变化和动画

  形状变化和动画是canvas中十分重要的部分。下面是关于形状变化中的重要的方法:

  scale(x, y) 大小缩放, x是水平方向的缩放因子,y是垂直方向的缩放因子,必须都为正数

  rotate(angle) 旋转,angle是旋转的角度,旋转的中心是canvas坐标原点

  translate(x, y) 移动canvas坐标

  transform(m11, m12, m21, m22, dx, dy):这个方法必须将当前的变形矩阵乘上下面的矩阵:

  m11 m21 dx

  m12 m22 dy

  0 0 1

  setTransform(m11, m12, m21, m22, dx, dy) :这个方法重置当前的变形矩阵为单位矩阵,然后以相同的参数调用 transform 方法。如果任意一个参数是无限大,那么变形矩阵也必须被标记为无限大,否则会抛出异常。

  将以上的变换整合起来使用的话,会制作出很多很漂亮的效果,比如下面的代码中,效果是每隔250微秒绘制一个矩形,并且矩形是会旋转的,颜色也是随机生成的。  

var can = function () {

  var canvas;

  var context;

  return {

  draw:
function () {

  var r
= Math.floor(Math.random() * 255) + 70;

  var g
= Math.floor(Math.random() * 255) + 70;

  var b
= Math.floor(Math.random() * 255) + 70;

  var s
= ‘rgba(‘ + r + ‘,’ + g + ‘,’ + b + ‘, 0.5)’;

  context.rotate(
0.2 * Math.PI);

  context.fillStyle
= s;

  context.fillRect(
10, 0, 150, 50);

  },

  init:
function () {

  canvas
= document.getElementById(“myCanvas”);

  context
= canvas.getContext(“2d”);

  context.translate(
200, 250);

  setInterval(can.draw,
250);

  }

  }

  } ();

  window.onload
= can.init;

  下面是静态效果图,动态效果图请看这个地址:http://msdeploy.net/IE9/Canvas/rotate.htm
 


0
相关文章