# 新建画布
1 | <canvas id="ca" width="454" height="350">亲爱的,您的浏览器不支持canvas,请升级浏览器后再来</canvas> |
# 准备画笔(工具)—js
canvas 只有一只 2d 画笔,所有的形状都通过该画笔来实现。
1 | //获取canvas对象 |
# 画点什么–学习 pen 的方法和属性了
可以画的东西有:
-
矩形(正方形 + 长方形)
a. 空心矩形
1
pen.strokeRect(x,y,w,h);
b. 实心矩形
1
pen.fillRect(x,y,w,h);
c. 透明矩形 — 清除矩形–超实用
1
2
3
4pen.clearRect(x,y,w,h);
//作用:
1、做异形形状,比如
2、刷新画布,清空画布() -
路径
通过路径可以绘制任何的形状,包括上面的矩形。是一个万能的画形状的方式。注意事项:路径需要描边或填充才能看到。
在画路径之前,先使用
1
pen.beginPath()
画完后,可以使用
1
pen.closePath()
来结束,如果路径本身就是闭合了的,则该方法什么也不做。
a. 直线、三角形、菱形等
需要使用起点、第二个点、再连线实现(锚点连线)
1
2
3
4
5
6
7
8//起点
pen.moveTo(x,y)
比如:
pen.moveTo(10,10);
//第二个点起(包括终点和中间点)
pen.lineTo(x,y);
//描边
pen.stroke();b. 圆、圆弧、半圆
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//语法:
pen.arc(x, y,半径, 开始弧度,结束弧度, anticlockwise)
//参数说明:
0. x,y是圆心的位置
1.anticlockwise 是否是逆时针:值为true时逆时针,false为顺时针[默认值]
2.角度与弧度的js表达式:
角度=弧度*180/Math.PI
弧度=角度*Math.PI/180
也就是2π弧度=360度
1弧度?多少度
1弧度==约57.32度
1度==?弧度
1度==0.017444弧度
1、画一个正圆
假设画布是500*500的尺寸,要画一个刚好能填充的圆:
pen.beginPath();
pen.arc(250,250,250,0,2*Math.PI);
pen.fill()
pen.closePath();
2、画一个半圆
pen.beginPath();
pen.arc(250,250,250,0,Math.PI);
pen.fill()
pen.closePath();
3、画一段圆弧(不填充)
pen.beginPath();
pen.arc(250,250,250,0,Math.PI);
pen.stroke()
pen.closePath();c. 路径矩形
1
2
3
4
5
6
7
8ctx.beginPath()
//路径矩形
ctx.rect(x,y,width,height)
//给矩形描边
ctx.stroke();
//给矩形填充
ctx.fill();
//以上,可以实现一个描边+填充的矩形,可以代替最开始学的空心矩形和实心矩形
# 上色:填充、描边、边框粗细
-
修改描边的颜色
1
2//在画东西之前就要先设置颜色
pen.strokeStyle="合法的颜色名" -
修改边框粗细
1
2
3pen.lineWidth="数值"
//比如:
pen.lineWidth=5; -
修改、添加填充色
1
pen.fillStyle="合法的颜色名"
-
描边路径
1
2//在绘制路径后调用该方法
pen.stroke(); -
填充路径
1
2//在绘制路径后调用该方法
pen.fill(); -
开始绘制路径,调用以下方法
1
pen.beginPath();
-
结束绘制路径,调用以下方法(不是必须的)
1
pen.closePath();
# 线条样式属性和方法
-
线端样式
在画形状之前,先使用以下样式设置线端的外观1
2
3pen.lineCap="butt|round|square"
默认 圆 方块
默认跟方块之间后者拔高了线条高度 -
线条相交样式
在画形状之前,先使用以下样式设置线端的外观。可以用在任意的闭合形状中(不一定是两条线)
1
2pen.lineJoin="miter|round|bevel"
默认尖角|圆角|斜切角
# 虚线
设置虚线(dashed)、点(dotted)
-
设置曲线的方法
1
2
3
4
5
6pen.setLineDash([虚线长度,虚线间隔])
//例子1:设置虚线
pen.setLineDash([10,5])
//例子2:设置点
pen.lineCap="round";
pen.setLineDash([2,15]) -
设置虚线的偏移
目的:改变虚线的起始点1
2pen.lineDashOffset=5;//从最左侧往左偏移5像素开始画虚线-跟样式相反
pen.lineDashOffset=-5;//从最左侧往右的方向偏移5像素
# 绘制文本
-
设置文本样式(属性)
1
2
3
4
5//设置字体大小等,写法同css的font属性
pen.font="32px 微软雅黑"
//设置颜色(昨天的)
pen.strokeStyle="颜色";//适用于空心文本
pen.fillStyle="颜色";//实心文本 -
绘制空心文本
1
pen.strokeText("写点啥",x,y,[最大宽度]);
-
绘制实心文本
1
pen.fillText("写点啥", x, y [, maxWidth])
# 渐变
原理跟 PS 渐变一样。
渐变是一种特殊的颜色。可将其当做普通颜色那样使用。
1 | 1. 生成一个渐变(方法)容器-线性 |
# 绘制(读入)一张图片
本身不生成图片,而是导入并加工图片。
# 图片来源
- 写 img 标签,并且在 canvas 中导入
- 动态通过 createElement 方法生成一张图片对象,并且导入
# 如何绘制(导入)
1 | 1.保留原本图片大小--最简单的写法 |
# canvas 实例
# 笑脸
1 |
|
# 机器猫
1 |
|
# 随机颜色色块
1 |
|
# 七彩虹伞
1 |
|
# 忍者水果
1 |
|