1.canvas的历史

首先,它是HTML5的一个标签。

它是为了客户端矢量图形而设计的,它没有自己的行为,它将一个绘图API展现给Javascript,使脚本能够把想绘制的东西都绘制到一块画布上。

其次,它是在Apple的Safari 1.3版本的浏览器中被引用。随后Firefox 1.5和Opera 9也支持了<canvas>标签。之后IE也可以使用<canvas>标签,但是要在IE的VML支持的基础上使用开源的Javascript代码来构建兼容性的画布。参考http://excanvas.sourceforge.net/

最后,由浏览器厂商非正式协会的推动,使<canvas>标签成为了HTML5草案中一个正式的标签。

2.canvas元素

2.1 canvas元素的方法和属性

canvas的属性

属性 描述 类型 取值范围 默认值
width    canvas元素绘图表面的宽度。在默认状态下,浏览器会将canvas元素的大小设定成与绘图表面大小一致。然而,如果在CSS中覆盖了元素大小,那么浏览器则会将绘图表面进行缩放,使之符合元素尺寸。 非负整数     在有效范围内的任意非负整数。数值开头可以添加“+”或空格,但是按照规则,不能给数值加px后缀 300
height canvas元素绘图表面的高度。具体参照对width属性的描述 非负整数 在有效范围内的任意非负整数。数值开头可以添加“+”或空格,但是按照规则,不能给数值加px后缀 300

canvas的方法

属性 描述
getContext() 返回与该canvas元素相关的绘图环境
toDataURL(type,quality) 返回一个数据地址,你可以将其设置为img元素的src属性值。第一个参数指定了图像的类型,例如image/jpeg或image/png。第一参数默认image/png。第二参数必须是0~1.0之间的double值,它表示JPEG图像显示质量
toBlob(callback,type,args…) 创建一个用于此canvas元素图像文件的Blob。第一个参数是一个回调函数,浏览器会以一个指向blob的引用为参数,去调用该回调函数。第二个参数以”image/png”这样的形式指定图像类型。最后一个参数介于是0~1.0之间值,表示JPEG图像的质量。将来也会加入其他一些用于精确调控图像属性的参数

讨论:有关canvas元素大小与绘图表面的大小

通过一个简单的例子说明下,如下图所示,是利用canvas达到的效果。

var canvas = document.getElementById("canvas");
context=canvas.getContext("2d"); context.font = "38pt Arial";
context.fillStyle = "cornflowerblue";
context.strokeStyle = "blue";
context.fillText("Hello Canvas",canvas.width/2 - 150,canvas.height/2 + 15);
context.strokeText("Hello Canvas",canvas.width/2 -150,canvas.height/2 + 15);

Example1-1

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Example1-1</title>
<style>
body{
background: #ddd;
}
#canvas{
margin: 10px;
padding: 10px;
background:#fff;
border: thin inset #aaa;
}
</style>
</head>
<body>
<canvas id="canvas" width="600" height="300">Canvas not supported</canvas>
<script src="Example1-1.js"></script>
</body>
</html>

HTML代码

下面是通过CSS来设定canvas的大小,效果图如下。

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Example1-1</title>
<style>
body{
background: #ddd;
}
#canvas{
margin: 10px;
padding: 10px;
background:#fff;
border: thin inset #aaa;
width :600px;
height: 300px;
}
</style>
</head>
<body>
<canvas id="canvas">Canvas not supported</canvas>
<script src="Example1-1.js"></script>
</body>
</html>

HTML代码

可以看出,元素的大小有明显的改变。

canvas实际上有两套尺寸,一个是元素本身的大小,还有一个是元素绘图表面的大小。

当设置元素的width与height属性时,实际上同时也修改了该元素本身的大小和绘图表面的大小。

当通过CSS设置元素大小时,只会改变元素本身的大小,而不会影响到绘图表面。

默认情况下,canvas元素和其绘图表面的大小时300px*300px。而使用CSS设置后,元素大小增加为600px*300px。绘图表面大小依然是300px*300px。这时浏览器就会对其进行缩放,使其符合元素的大小。当然就出现了上面第二张图所示的情况。

canvas初探1的更多相关文章

  1. canvas初探3:画方画圆

    绘制矩形的方法,strokeRect().fillRect()及clearRect(). 方法 描述 strokeRect(double x,double y,double w,double h) 使 ...

  2. canvas初探2

    2.2 canvas的绘图环境 canvas仅仅只是一个绘图的容器,其内存在一个绘图环境,该环境对象提供了全部的绘图功能. 目前canvas的绘图环境是2d,但canvas规范在着手准备支持其他类型的 ...

  3. HTML5 Canvas 初探

    仅仅只是一个简单的hello world. js代码很简单: <!DOCTYPE HTML> <html lang="cn"> <head> & ...

  4. Web基础 HTML CSS JS JQuery AJAX

    1. Web基础 网页的骨骼HTML 什么是HTML超文本标记语言:Hyper Text Markup Language 这都不重要,重要的是:HTML是Web网页的基本组成部分HTML中定义的元素, ...

  5. 初探canvas

    canvas是html5新增的一个专用于图形处理的标签,利用canvas可以实现大部分图形操作canvas的一些基本操作与其他图形编程工具类似,包含:各种形状的边框.路径绘制和填充,画布属性调整,样式 ...

  6. Canvas标签初探

    学了一点基础知识,感觉好神奇,全部练习代码 <html> <head> <meta http-equiv=Content-Type content="text/ ...

  7. 初探Javascript之Canvas

    什么是Canvas <canvas>是 HTML5 新增的元素,可使用JavaScript脚本来绘制图形. canvas是一个矩形区域,您可以控制其每一像素. 引入Canvas ```ht ...

  8. ReactNative学习实践--动画初探之加载动画

    学习和实践react已经有一段时间了,在经历了从最初的彷徨到解决痛点时的兴奋,再到不断实践后遭遇问题时的苦闷,确实被这一种新的思维方式和开发模式所折服,react不是万能的,在很多场景下滥用反而会适得 ...

  9. Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明

    今天给大家介绍下Android中滑屏功能的一个基本实现过程以及原理初探,最后给大家重点讲解View视图中scrollTo 与 scrollBy这两个函数的区别 . 首先 ,我们必须明白在Android ...

随机推荐

  1. 忘记Windows7登陆密码解决办法

    忘记 Windows7 的登陆密码,解决这个问题的思路就是替换 system32 下的 Magnify.exe . 可以从 WindowsPE 启动,到 C:\windows\system32 下. ...

  2. AJAX的核心XMLHttpRequest对象

    为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,jQuery,Css...)重新融合程一个新的知识框架.而XMLHttpRequest对象则是其中的重 ...

  3. Docker和Docker-compose安装教程以及docker-elk,docker-storm安装教程

    此安装教程仅供我自己安装配置时查看,其他的人不可以偷看!!! 安装Docker 1. Update package information, ensure that APT works with th ...

  4. linux环境中使用转义字符使命令行字符颜色高亮

    而通过转义序列设置终端显示属性的格式为: \033[Param {;Param;...}m 其中转义序列以 \033[ 为开头,m 为设置属性结束,中间部分的 Param 为属性值,{} 表示可以设置 ...

  5. 【Java并发系列01】Thread及ThreadGroup杂谈

    img { border: solid black 1px } 一.前言 最近开始学习Java并发编程,把学习过程记录下.估计不是那么系统,主要应该是Java API的介绍(不涉及最基础的概念介绍), ...

  6. F#之旅0 - 开端

    F#之旅0 - 开端 UWP的学习告一段落,CozyRSS的UWP版本并没有做.UWP跟wpf开发几乎一模一样,然后又引入了很多针对移动设备的东西,这部分有点像android.没啥太大的意思,不难,估 ...

  7. Ubuntu菜鸟入门(六)—— 有道词典安装

    一.在有道辞掉官网上下载安装包: youdao-dict_1.1.0-0-ubuntu_amd64.deb 二.安装 1.打开下载目录,进行安装 sudo dpkg -i youdao-dict_1. ...

  8. Swif - 可选型

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #4dbf56 } p.p2 { margin: 0.0px 0. ...

  9. 华为荣耀6 H60-L02/L12(联通版)救砖包【适用于无限重启】

    本帖最后由 HOT米粒 于 2014-11-16 20:43 编辑 华为荣耀6 H60-L02/L12(联通版)救砖包[适用于无限重启]说明: 1.本工具包用于华为荣耀6 H60-L02(联通版): ...

  10. jackrabbit学习笔记(1)

    http://dove19900520.iteye.com/blog/1654346 看的这个文章照着来的,遇到了一些问题,记录一下 运行报这个错:NamespaceException: wiki: ...