关于H5的Canvas
1、什么是canvas?
<canvas>标签是h5新增的,通过脚本(通常是js)来绘制图形,canvas只是一个图形容器,或者说是画布。
canvas可以绘制路径、图形、字以及添加图像。

2、创建一个画布
<canvas id="can" width="200" height="100"></canvas>
canvas中需要指定一个id属性供脚本引用,width和height定义画布的大小。另外可以用style来添加画布边框。
<style type="text/css">
canvas {
border: #ccc solid 1px;
}
</style>
3、使用js绘制图像
canvas本身没有绘图能力,所有的绘图工作必须在js内部完成:
首先找到canvas元素:
var can=document.getElementById("can");
其次创建context对象(getContext("2d")对象是内建的H5对象,拥有多种绘制图形方法):
var ctx=can.getContext("2d");
设置填充图形的颜色:
ctx.fillStyle="#FF0000"; // fillStyle可以是css颜色,渐变,或图案,默认设置是黑色(#000000)
定义矩形:
ctx.fillRect(0,0,150,70); // fillRect(x,y,width,height)定义了矩形及其长宽
4、Canvas坐标
canvas是一个二维网格。cancas的左上角坐标为(0,0),上面的fillRect方法的参数(0,0,150,70)意思就是从左上角(0,0)开始在画布上绘制一个150*70的矩形。
5、Canvas路径
画线:
beginPath();新建一条路径
moveTo(x,y);定义线条开始坐标
lineTo(x,y);定义线条结束坐标
closePath();闭合路径后,图形绘制又重新回到上下文中
stroke();通过线条来绘制图形轮廓
fill();通过填充路径的内容区域生成实心的图形
实例:
var can=document.getElementById("can");
var ctx=can.getContext("2d");
ctx.moveTo(0,0);
ctx.lineTo(200,100);
ctx.stroke();
画圆:
1、arc(x1,y1,x2,y2,radius);
根据给定的控制点和半径画圆弧
ctx.arc(95,50,40,0,2*Math.PI);
2、arc(x,y,r,startAngle,endAngle,anticlockwise);
以(x,y)为圆心,r为半径,从startAngle弧度开始到endAngle弧度结束。anticlockwise为true表示逆时针,false为顺时针
0弧度指x轴正方向 ,角度转换成弧度:(Math.PI/180)*degrees
ctx.arc(50,50,40,0,Math.PI/2,false);




arcTo方法的说明:
这个方法可以这样理解。绘制的弧形是由两条切线所决定。
第 1 条切线:起始点和控制点1决定的直线。
第 2 条切线:控制点1 和控制点2决定的直线。
其实绘制的圆弧就是与这两条直线相切的圆弧。
贝塞尔曲线请自行上网搜索。
6.canvas文本
font定义字体
fillText(text,x,y)绘制实心文本
strokeText(text,x,y) 绘制空心文本
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.font="30px Arial";
ctx.fillText("Hello World",10,50);

7、canvas渐变
createLinearGradient(x,y,x1,y1)创建线条渐变
createRadialGradient(x,y,r,x1,y1,r1)创建一个径向/圆渐变
addColorStop()指定颜色停止,参数使用坐标描述,可以是0至1
线性:
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
// 创建渐变
var grd=ctx.createLinearGradient(0,0,200,0);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");
// 填充渐变
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);
径向:
// 创建渐变
var grd=ctx.createRadialGradient(75,50,5,90,60,100);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");
// 填充渐变
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,80);
8、canvas图像
drawImage(image,x,y);
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var img=document.getElementById("scream");
或者 var img=new Image();
img.src="flower.png";
ctx.drawImage(img,10,10);
9、添加样式和颜色
fillStyle =color 设置图形填充颜色
strokeStyle=color 设置图形轮廓颜色
10、变形
translate(x,y)用来移动canvas的原点到指定的位置
rotate(angle)旋转坐标轴(angle为顺时针方向,弧度为单位,旋转中心为坐标原点)
11、同一个画布如何只改变其中一条线的颜色:(先保存线条在涂色,然后restore到上一状态)
function arrow2(canId, ox, oy, x1, y1, x2, y2,color) {
//参数说明 canvas的 id ,原点坐标 第一个端点的坐标,第二个端点的坐标
var sta = new Array(x1, y1);
var end = new Array(x2, y2);
var canvas = document.getElementById(canId);
if(canvas == null) return false;
var ctx = canvas.getContext('2d');
//画线
ctx.beginPath();
ctx.translate(ox, oy); //坐标源点
ctx.moveTo(sta[0], sta[1]);
ctx.lineTo(end[0], end[1]);
ctx.save();
ctx.strokeStyle=color;//线条颜色
ctx.fillStyle = color;//箭头颜色
ctx.fill();
ctx.stroke();
//画箭头
ctx.translate(end[0], end[1]);
//我的箭头本垂直向下,算出直线偏离Y的角,然后旋转 ,rotate是顺时针旋转的,所以加个负号
var ang = (end[0] - sta[0]) / (end[1] - sta[1]);
ang = Math.atan(ang);
if(end[1] - sta[1] >= 0) {
ctx.rotate(-ang);
} else {
ctx.rotate(Math.PI - ang); //加个180度,反过来
}
ctx.lineTo(-5, -10);
ctx.lineTo(0, -5);
ctx.lineTo(5, -10);
ctx.lineTo(0, 0);
ctx.fill(); //箭头是个封闭图形
ctx.restore(); //恢复到堆的上一个状态
ctx.closePath();
}
画布如果与div或其他块标签冲突,可以让画布背景变透明加style如下:
<canvas id="Canvas1" width="140" height="400" style="background: rgba(255,255,155,0); position: absolute;left: 130px; z-index: -1">你的浏览器不支持canvas,请升级你的浏览器</canvas>
z-index代表叠加顺序。
另外详细:https://blog.csdn.net/u012468376/article/details/73350998
关于H5的Canvas的更多相关文章
- h5标签canvas关于getImageData跨域的问题
h5标签canvas关于getImageData跨域的问题 在学习h5的时候,canvas标签中getImageData()报错:security error! 具体代码如下(chrome浏览器): ...
- 关于h5绘制canvas生成图片的注意点!
1.第一个是关于移动端自适应的问题: 答:如果是最后只要一张canvas生成的图片,而不是要绘制的canvas的图形,则不需要考虑自适应,绘制canvas的时候的宽高,可以直接写成UI提供的图的大小, ...
- HTML5 Canvas绘图基本使用方法, H5使用Canvas绘图
Canvas 是H5的一部分,允许脚本语言动态渲染图像.Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的绘图功能(API),在网 ...
- H5使用Canvas绘图
一.什么是Canvas Canvas 是H5的一部分,允许脚本语言动态渲染图像.Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的 ...
- 用H5的canvas做时钟
<!doctype html><html> <head> <meta charset="UTF-8"> <title>D ...
- H5 认识canvas
不同于SVG,HTML中的元素canvas只支持一种原生的图形绘制:矩形.所有其他的图形的绘制都至少需要生成一条路径.不过,我们拥有众多路径生成的方法让复杂图形的绘制成为了可能. canvas提供了三 ...
- H5标签-canvas实现颜色拾取功能
HTML5 <canvas> 标签是用于绘制图像,不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器),必须使用脚本(通常是 JS)来完成实际的绘图任务. &l ...
- H5之canvas简单入门
<canvas></canvas>是html5出现的新标签,像所有的dom对象一样它有自己本身的属性.方法和事件,其中就有绘图的方法,js能够调用它来进行绘图 <canv ...
- H5的canvas绘图技术
canvas元素是HTML5中新添加的一个元素,该元素是HTML5中的一个亮点.Canvas元素就像一块画布,通过该元素自带的API结合JavaScript代码可以绘制各种图形和图像以及动画效果. 1 ...
随机推荐
- Uva - 1594 - Ducci Sequence
水题,算出每次的结果,比较是否全0,循环1000次还不是全0则LOOP AC代码: #include <iostream> #include <cstdio> #include ...
- Java枚举类"全方位"
作为一种长度固定,数据未定的一种存储数据集的数据类型,枚举类有如下方法可供参考. 普通类型的枚举类的创建 protected enum ColorEnum{ red,orange,yellow,gre ...
- UI设计切忌墨守成规,但改变也须用数据说话
因为我提倡一种非标准的方法,Jon Galloway在一段评论里点了我的名: 年,他们很清楚怎么去填写这些表单.如果采用其他方法,用户会感到困惑,有些人还会落荒而逃(丢掉购物车,等等).Web表单很有 ...
- javascript之DOM文档对象模型编程的引入
/* DOM(Document Object Model) 文档对象模型 一个html页面被浏览器加载的时候,浏览器就会对整个html页面上的所有标签都会创建一个对应的 对象进行描述,我们在浏览器上看 ...
- 【Android 应用开发】 ActionBar 基础
作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3920439 ...
- numpy教程:矩阵matrix及其运算
http://blog.csdn.net/pipisorry/article/details/48791403 numpy矩阵简介 NumPy函数库中存在两种不同的数据类型(矩阵matrix和数组ar ...
- 强力推荐各位攻城狮查看,收藏IT职业技能图谱(全套13张)
汇集整理泛 IT 技术领域(云计算,大数据,运维,安全,开发语言,智能硬件等)学习技能图谱,帮助程序员梳理知识框架结构,并尝试提供路径指导和精华资源,方便技术人学习成长. 运维工程师必备技能 程序开发 ...
- 《java入门第一季》集合框架引入与面试题
注:在开始的几篇集合介绍里,不包含泛型的概念.泛型在讲述所有集合后再加入进去. 集合的由来: 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我 ...
- 【网站搭建】搭建独立域名博客 -- 独立域名博客上线了 www.hanshuliang.com
博客是安装在阿里云的服务器上. 小结 : -- 进入数据库命令 :mysql -uroot -p123456 ; -- 检查nginx配置语法 :.../nginx/sbin/nginx -t; -- ...
- HDTV(1920x1080)码率和视频质量关系的研究 1 (前期准备)
Hans Hoffmann等人在论文<Studies on the Bit Rate Requirements for a HDTV Format With 1920 x 1080 pixel ...