canvas学习笔记(一)
由于图片上传有些问题,如要查看图片效果,请前往CSDN,链接:https://blog.csdn.net/qq_44363897/article/details/99683881
canvas简介
- canvas是 HTML5 提供的一种新标签.
- 语法:
1
<canvas> </canvas>
- canvas 是一个矩形区域的画布,可以用 JavaScript 在上面绘画,控制其每一个像素.
- canvas 标签使用 JavaScript 在网页上绘制图像,本身不具备绘图功能。
- canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
canvas主要应用领域
- 游戏开发
- 可视化数据:数据图表化
- banner广告
- 图形编辑器:Photoshop 图形编辑器将能够 100%基于 Web 实现。
- 网页特效.
canvas初步使用
- 可以为canvas设置 width 和 height 属性,但是属性值单位必须是 px,否则忽略
- width 和 hegiht:默认 300*150 像素
- 不要用 CSS 控制它的宽和高,会走出图片拉伸,一般直接设置为内联样式或者利用js设置。
- 重新设置 canvas 标签的宽高属性会让画布擦除所有的内容
- 可以给 canvas 画布设置背景色.
canvas的兼容性
- ie9 以上才支持 canvas, 其他 chrome、ff、苹果浏览器等都支持
- 只要浏览器兼容 canvas,那么就会支持绝大部分 api(个别最新 api 除外)
- 移动端的兼容情况非常理想,基本上随便使用
- 2d 的支持的都非常好,3d(webgl)ie11 才支持,其他都支持
- 如果浏览器不兼容,最好进行友好提示,如下:
1
2
3<canvas id="can">
你的浏览器不支持canvas,请升级浏览器.浏览器不支持,显示此行文本
</canvas>canvas绘制上下文
- canvas 的绘图是使用 JavaScript 操作的。
- Context 对象就是 JavaScript 操作 Canvas 的接口
- 使用[CanvasElement].getContext(‘2d’)来获取 2D 绘图上下文,使用[CanvasElement].getContext(‘webgl’)来获取 3D 绘图上下文
1
2var canvas = document.getElementById('can'); //获得画布
var ctx = canvas.getContext('2d'); //注意:2d小写, 3d:webglcanvas坐标系
- canvas坐标系,从左上角(0,0)开始,x向右增大,y向下增大。
设置绘制起点
- 使用moveTo(x , y)方法来设置起点,即画笔的初始位置
- x , y都是相对于canvas盒子的左上角的
- 语法:
1
2var ctx = canvas.getContext('2d');
ctx.moveTo(x,y);绘制直线
- 使用lineTo(x,y)方法来绘制直线
- x , y 表示直线的起点,即指从x,y的位置绘制一条直线到起点或者上一个线头点。
- 语法:
1
2var ctx = canvas.getContext('2d');
ctx.lineTo(x,y);路径的开始与闭合
- 开始路径:ctx.beginPath( )方法
- 如果是绘制不同状态的线段或者形状,必须使用开始新路径的方法把不同的绘制操作隔开
- beginPath: 核心的作用是将 不同绘制的形状进行隔离,每次执行此方法,表示重新绘制一个路径,跟之前的绘制的墨迹可以进行分开样式设置和管理
- 闭合路径:ctx.closePath( )方法:闭合路径会自动把最后的线头和开始的线头连在一起。
描边
- 语法:ctx.stroke( )
- 次方法可以使绘制的图像真正显示在浏览器窗口,路径只是草稿,真正绘制线必须执行stroke
canvas 绘制的基本步骤
- 第一步:利用DOM获得canvas标签,获得后可以设置其宽高
- 第二步:获得上下文:canvasElem.getContext(‘2d’);
- 第三步:开始路径规划 :ctx.beginPath( )
- 第四步:设置起始点:ctx.moveTo(x, y)
- 第五步:绘制线条:ctx.lineTo(x, y),之后可以设置描边的样式,如颜色等(详见案例)。
- 第六步:闭合路径(ctx.closePath( ))及描边或者描边(ctx.stroke( ))
填充
- 语法:ctx.fill( )
- 将闭合的路径的内容填充具体的颜色。默认黑色
案例
案例1:红色的闭合三角形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<canvas id="demo" width="600px" height="600px">
你的浏览器不支持canvas,请升级
</canvas>
<script>
//拿到canvas标签
var canvas = document.getElementById("demo");
//拿到canvas的上下文
var tex = canvas.getContext("2d");
//绘制
tex.moveTo(100,100);//把画笔移动到100,100处
tex.lineTo(200,100);//从画笔的位置画一条直线到200,100处
tex.lineTo(100,200);//在200,100处画一条线到100,200处
//tex.lineTo(100,100);
tex.closePath();//闭合路径,与tex.lineTo(100,100)作用相同
//设置线宽
tex.lineWidth = 4;
//展现路线
tex.strokeStyle = "blue";//设置描边样式
tex.stroke();//描边
//填充
tex.fillStyle = "red";//设置填充颜色
tex.fill();
</script>案例2:折线图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37<canvas id="ideo">
你的浏览器不支持canvas,请升级浏览器
</canvas>
<script>
var canvas = document.getElementById("ideo");
var tex = canvas.getContext("2d");
//设置画布的宽高以及边框样式
canvas.width = 1000;
canvas.height = 500;
canvas.style.border = "1px solid blue";
tex.moveTo(100,400); //起始点即原点
tex.lineTo(800,400); //x轴
tex.lineTo(790,410); //x轴下半部分的箭头
tex.moveTo(800,400); //设置画笔到该点
tex.lineTo(790,390); //x轴上半部分箭头
tex.strokeStyle = "red"; //设置x轴的颜色为红色
tex.stroke();//描边
tex.beginPath();//开启一个新状态
tex.moveTo(100,400); //起始点即原点
tex.lineTo(100,50); //y轴
tex.lineTo(110,60); //y轴右半部分箭头
tex.moveTo(100,50); //设置画笔到该点
tex.lineTo(90,60); //设置y轴左半部分箭头
tex.strokeStyle = "red"; //设置y轴的颜色为红色
tex.stroke(); //描边
tex.beginPath(); //开启一个新状态
tex.moveTo(100,400); //画笔回到起始原点
//以下为点的坐标,可以任意设置
tex.lineTo(150,250);
tex.lineTo(250,150);
tex.lineTo(600,150);
tex.lineTo(750,80);
//描边样式
tex.strokeStyle = "green";
tex.stroke();
</script>
本文摘录自老马前端canvas学习笔记,如有侵权,请联系删除。
本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Charles's Blog!