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的更多相关文章

  1. h5标签canvas关于getImageData跨域的问题

    h5标签canvas关于getImageData跨域的问题 在学习h5的时候,canvas标签中getImageData()报错:security error! 具体代码如下(chrome浏览器): ...

  2. 关于h5绘制canvas生成图片的注意点!

    1.第一个是关于移动端自适应的问题: 答:如果是最后只要一张canvas生成的图片,而不是要绘制的canvas的图形,则不需要考虑自适应,绘制canvas的时候的宽高,可以直接写成UI提供的图的大小, ...

  3. HTML5 Canvas绘图基本使用方法, H5使用Canvas绘图

    Canvas 是H5的一部分,允许脚本语言动态渲染图像.Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的绘图功能(API),在网 ...

  4. H5使用Canvas绘图

    一.什么是Canvas Canvas 是H5的一部分,允许脚本语言动态渲染图像.Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的 ...

  5. 用H5的canvas做时钟

    <!doctype html><html> <head> <meta charset="UTF-8"> <title>D ...

  6. H5 认识canvas

    不同于SVG,HTML中的元素canvas只支持一种原生的图形绘制:矩形.所有其他的图形的绘制都至少需要生成一条路径.不过,我们拥有众多路径生成的方法让复杂图形的绘制成为了可能. canvas提供了三 ...

  7. H5标签-canvas实现颜色拾取功能

    HTML5 <canvas> 标签是用于绘制图像,不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器),必须使用脚本(通常是 JS)来完成实际的绘图任务. &l ...

  8. H5之canvas简单入门

    <canvas></canvas>是html5出现的新标签,像所有的dom对象一样它有自己本身的属性.方法和事件,其中就有绘图的方法,js能够调用它来进行绘图 <canv ...

  9. H5的canvas绘图技术

    canvas元素是HTML5中新添加的一个元素,该元素是HTML5中的一个亮点.Canvas元素就像一块画布,通过该元素自带的API结合JavaScript代码可以绘制各种图形和图像以及动画效果. 1 ...

随机推荐

  1. C# 运行时序列化

    一. 序列化与反序列的作用 为什么要有序列化呢,考虑下面这种情况,在WINFORM或者更为方便的WPF工程中,当我们进行UI设计时,可以随意的将一个控件剪切/张贴到另外一个地方.操作方便的背后是什么在 ...

  2. 【一天一道LeetCode】#68. Text Justification

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  3. C语言之任意进制的转换

    我们都知道转换进制是一个让人比较头疼的事情,下面我的代码不是最好的,也就仅仅是一个思路而已,至少我认为使用栈来进行进制转换是比较合适的一种方法,好了,不多叙述了. #include<stdio. ...

  4. shell 中的特殊变量

    shell 中的特殊变量 变量名   含义 $#     参数的个数 $$     代表所在命令的PID $0     shell或shell脚本的名字 $*     以一对双引号给出参数列表 $@  ...

  5. MPEG-7 视觉描述符

    本文节选自<基于MPEG-7与内容的图像检索技术的研究>. MPEG-7 标准中视觉描述工具包括基本结构和描述符.本文主要介绍各描述符. (1)颜色描述符 MPEG-7 主要定义了七种颜色 ...

  6. C++中不能被重载的运算符介绍

    C/C++ 里大多数运算符都可以在 C++ 中被重载. C 的运算符中只有 . 和 ?:(以及 sizeof,技术上可以看作一个运算符)不可以被重载.C++ 增加了一些自己的运算符,除了 :: 和 . ...

  7. Spring AOP (二)

    下面介绍@AspectJ语法基础 一.切点表达式函数 AspectJ的切点表达式由关键字和操作参数组成,如execution(* greetTo(..)) 的切点表达式,execution为关键字,而 ...

  8. Android 添加library的时候出错添加不上

    在向android工程中导入library的时候,会和出现导入不成功,打开查看添加library界面,会发现你添加的library的路径出现D:/work/...?类似的情况,但是别的工程使用的时候又 ...

  9. OpenCV实现仿射变换

    什么是仿射变换?¶ 一个任意的仿射变换都能表示为 乘以一个矩阵 (线性变换) 接着再 加上一个向量 (平移). 综上所述, 我们能够用仿射变换来表示: 旋转 (线性变换) 平移 (向量加) 缩放操作 ...

  10. Ubuntu14.04安装androidStudio错误解除

    错误1 ubuntu androidStudio :app:mergeDebugResources FAILED 办法: sudo dpkg --add-architecture i386 sudo ...