canvas的HTML5新增标签

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了canvas的HTML5新增标签相关的知识,希望对你有一定的参考价值。

参考技术A

定义和用法:
Canvas 对象表示一个 html 画布元素 -<canvas>。它没有自己的行为,但是定义了一个 API 支持脚本化客户端绘图操作。
你可以直接在该对象上指定宽度和高度,但是,其大多数功能都可以通过CanvasRenderingContext2D 对象获得。 这是通过 Canvas 对象的getContext() 方法并且把直接量字符串 2d 作为唯一的参数传递给它而获得的。
<canvas> 标记在 Safari 1.3 中引入,在制作此参考页时,它在 Firefox 1.5 和 Opera 9 中也得到了支持。在 IE 中,<canvas> 标记及其 API 可以使用位于excanvas点sourceforge点net的 ExplorerCanvas 开源项目来模拟。
提示:如果希望学习如何使用 <canvas> 来绘制图形,可以访问 Mozilla 提供的Canvas 教程(英文)以及相应的中文 Canvas 教程。 这个 HTML 元素是为了客户端矢量图形而设计的。它自己没有行为,但却把一个绘图 API 展现给客户端 javascript 以使脚本能够把想绘制的东西都绘制到一块画布上。
<canvas> 标记由 Apple 在 Safari 1.3 Web 浏览器中引入。对 HTML 的这一根本扩展的原因在于,HTML 在 Safari 中的绘图能力也为 Mac OS X 桌面的 Dashboard 组件所使用,并且 Apple 希望有一种方式在 Dashboard 中支持脚本化的图形。
Firefox 1.5 和 Opera 9 都跟随了 Safari 的引领。这两个浏览器都支持 <canvas> 标记。
我们甚至可以在 IE 中使用 <canvas> 标记,并在 IE 的 VML 支持的基础上用开源的 JavaScript 代码(由 Google 发起)来构建兼容性的画布。
<canvas> 的标准化的努力由一个 Web 浏览器厂商的非正式协会在推进,目前 <canvas> 已经成为 HTML 5 草案中一个正式的标签。 <canvas> 标记和 SVG 以及 VML 之间的一个重要的不同是,<canvas> 有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图。
这两种方式在功能上是等同的,任何一种都可以用另一种来模拟。从表面上看,它们很不相同,可是,每一种都有强项和弱点。例如,SVG 绘图很容易编辑,只要从其描述中移除元素就行。
要从同一图形的一个 <canvas> 标记中移除元素,往往需要擦掉绘图重新绘制它。 大多数 Canvas 绘图 API 都没有定义在 <canvas> 元素本身上,而是定义在通过画布的getContext() 方法获得的一个“绘图环境”对象上。
Canvas API 也使用了路径的表示法。但是,路径由一系列的方法调用来定义,而不是描述为字母和数字的字符串,比如调用 beginPath() 和 arc() 方法。
一旦定义了路径,其他的方法,如 fill(),都是对此路径操作。绘图环境的各种属性,比如 fillStyle,说明了这些操作如何使用。
注释:Canvas API 非常紧凑的一个原因上它没有对绘制文本提供任何支持。要把文本加入到一个 <canvas> 图形,必须要么自己绘制它再用位图图像合并它,或者在 <canvas> 上方使用 CSS 定位来覆盖 HTML 文本。 height 属性
画布的高度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口高度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。默认值是 300。
width 属性
画布的宽度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口宽度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。默认值是 300。 方法 描述 getContext() 返回一个用于在画布上绘图的环境。 例子
<!DOCTYPE HTML>
<html>
<body>
<canvas id=myCanvas>your browser does not support the canvas tag </canvas>
<script type=text/javascript>
var canvas=document.getElementById('myCanvas');
var ctx=canvas.getContext('2d');
ctx.fillStyle='#FF0000';
ctx.fillRect(0,0,80,100);
</script>
</body>
</html>

canvas和svg小记

一、关于canvas

  <canvas> 是 HTML5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形 例如,它可以用于绘制图形,创建动画。

  <canvas> 最早由Apple引入WebKit 我们可以使用<canvas>标签来定义一个canvas元素,canvas标签的两个属性<canvas> 看起来和 <img> 元素很相像,唯一的不同就是它并没有 src alt 属性。 实际上,<canvas> 标签只有两个属性—— widthheight,选择不写也可以。 当没有设置宽度和高度的时候,canvas会初始化宽度为300像素和高度为150像素

  画布的高宽 html属性设置width height时只影响画布本身不影画布内容,即 <canvas width = " " height= " " ><canvas>

  css属性设置width height时不但会影响画布本身的高宽, 还会使画布中的内容等比例缩放(缩放参照于画布默认的尺寸),即:<canvas  style = " width :  ; heigh :  " ><canvas>

  <canvas> 元素只是创造了一个固定大小的画布,在矩形区域的画布上,控制其每一像素,JavaScript 来绘制 2D图形,逐像素进行渲染。canvas元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成。

  

<script type="text/javascript">
  var c=document.getElementById("myCanvas");
  var cxt=c.getContext("2d");
  cxt.fillStyle="#FF0000";
  cxt.fillRect(0,0,150,75);
</script>
JavaScript 使用 id 来寻找 canvas 元素:
var c=document.getElementById("myCanvas");
然后,创建 context 对象:
var cxt=c.getContext("2d"); getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
下面的两行代码绘制一个红色的矩形:
cxt.fillStyle="#FF0000";cxt.fillRect(0,0,150,75); fillStyle 方法将其染成红色,fillRect 方法规定了形状、位置和尺寸。
上面的 fillRect 方法拥有参数 (0,0,150,75)。意思是:在画布上绘制 150x75 的矩形,从左上角开始 (canvas画布的左上角为原点(0,0))。

 

二、关于svg

  SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG是W3C("World Wide Web ConSortium" 即 " 国际互联网标准组织")在2000年8月制定的一种新的二维矢量图形格式,也是规范中的网络矢量图形标准。SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。

  下面的例子是一个简单的 SVG 文件的例子。SVG 文件必须使用 .svg 后缀来保存:

  <?xml version="1.0" standalone="no"?>
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
  <svg width="100%" height="100%" version="1.1"xmlns="网址">
  <circle cx="100" cy="50" r="40" stroke="black"stroke-width="2" fill="red"/>
  </svg>
 
第一行包含了 XML 声明。请注意 standalone 属性!该属性规定此 SVG 文件是否是“独立的”,或含有对外部文件的引用。
standalone="no" 意味着 SVG 文档会引用一个外部文件 - 在这里,是 DTD 文件。
第二和第三行引用了这个外部的 SVG DTD。该 DTD 位于 “http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd”。该 DTD 位于 W3C,含有所有允许的 SVG 元素。
SVG 代码以 <svg> 元素开始,包括开启标签 <svg> 和关闭标签 </svg> 。这是根元素。width 和 height 属性可设置此 SVG 文档的宽度和高度。version 属性可定义所使用的 SVG 版本,xmlns 属性可定义 SVG 命名空间。
SVG 的 <circle> 用来创建一个圆。cx 和 cy 属性定义圆中心的 x 和 y 坐标。如果忽略这两个属性,那么圆点会被设置为 (0, 0)。r 属性定义圆的半径。
stroke 和 stroke-width 属性控制如何显示形状的轮廓。我们把圆的轮廓设置为 2px 宽,黑边框。
fill 属性设置形状内的颜色。我们把填充颜色设置为红色。
关闭标签的作用是关闭 SVG 元素和文档本身。
 
三、canvas与svg比较  

  1.SVG具有丰富的DOM接口,在绘制方面Canvas是逐像素进行渲染的,也就是说,你需要告诉Canvas那个像素点什么颜色,他就会老老实实的把这个像素点画出来,但是要让它处理点击事件,拖动事件就要费功夫了,需要自己写很多事件触发的代码。而SVG则不同SVG是将每个绘制的元素当成一个对象,天生的相应一切网页原生DOM操作,当你需要个给一个矩形添加点击事件时,你只需要addOnClickListener就可以了~可以说是非常方便。

        2.Canvas绘制效率高,Canvas只关心我们需要在指定的位置绘制对应像素,这样虽然让我们的交互变得十分麻烦,但是大大提高了绘制效率,反观SVG由于需要支持DOM操作,每个对象的属性值更改时都要进行更新,这样当绘制数据变化比较大或者对实时性要求较高时,就会出现卡顿的现象。

        3.SVG不依赖分辨率,这也是SVG的一大优点,由于SVG绘图时是根据函数公式计算得出的位置,所以在不同分辨率下均能显现出优秀的效果,这一点在适配不同分辨率时大有用处,而canvas则是基于像素进行渲染的,所以会受到分辨率的影响。

下面的图看起来可能更直观一点:

技术分享图片

 

 





以上是关于canvas的HTML5新增标签的主要内容,如果未能解决你的问题,请参考以下文章

HTML5新增特性

HTML5绘图

canvas

Canvas基础知识

canvas和svg小记

画布(canvas)