Canvas

178 阅读3分钟

canvas

1.创建容器

var canvas = document.getElementById('canvas')

2.创建画笔

var context = this.canvas.getContext('2d')

3.绘制路径

context.rect(30,30,50,50)

4.填充

context.fillStyle = "#000000"
context.fill()

5.描边

context.lineWidth = 20
context.strokeStyle = "#000000"
context.stroke()

6.画线

ctx.beginPath(); // 开始路径绘制
ctx.moveTo(20, 20); // 设置路径起点,坐标为(20,20)
ctx.lineTo(200, 20); // 绘制一条到(200,20)的直线
ctx.lineWidth = 1.0; // 设置线宽
ctx.strokeStyle = '#CC0000'; // 设置线的颜色
ctx.stroke(); // 进行线的着色,这时整条线才变得可见

7.绘制图形

ctx.fillStyle = 'yellow';
ctx.fillRect(50, 50, 200, 100); //实心矩形
ctx.strokeStyle = 'yellow'; 
ctx.strokeRect(50, 50, 200, 100); //空心矩形

8.清屏

ctx.clearRect(100,50,50,50); 

9.绘制文本

// 设置字体
ctx.font = "Bold 20px Arial"; 
// 设置对齐方式
ctx.textAlign = "left";
// 设置填充颜色
ctx.fillStyle = "#008600"; 
// 设置字体内容,以及在画布上的位置
ctx.fillText("Hello!", 10, 50); 
// 绘制空心字
ctx.strokeText("Hello!", 10, 100); 

10.绘制圆形和扇形

ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);

arc方法的x和y参数是圆心坐标,radius是半径,startAngle和endAngle则是扇形的起始角度和终止角度(以弧度表示),anticlockwise表示做图时应该逆时针画(true)还是顺时针画(false)。

下面是如何绘制实心的圆形。

ctx.beginPath(); 
ctx.arc(60, 60, 50, 0, Math.PI*2, true); 
ctx.fillStyle = "#000000"; 
ctx.fill();

11.设置渐变色

var myGradient = ctx.createLinearGradient(0, 0, 0, 160); 
​
myGradient.addColorStop(0, "#BABABA"); 
​
myGradient.addColorStop(1, "#636363");

createLinearGradient方法的参数是(x1, y1, x2, y2),其中x1和y1是起点坐标,x2和y2是终点坐标。通过不同的坐标值,可以生成从上至下、从左到右的渐变等等。

使用方法如下:

ctx.fillStyle = myGradient;
ctx.fillRect(10,10,200,100);

12.设置阴影

ctx.shadowOffsetX = 10; // 设置水平位移
ctx.shadowOffsetY = 10; // 设置垂直位移
ctx.shadowBlur = 5; // 设置模糊度
ctx.shadowColor = "rgba(0,0,0,0.5)"; // 设置阴影颜色ctx.fillStyle = "#CC0000"; 
ctx.fillRect(10,10,200,100);

13.globalCompositeOperation 属性

ctx.globalCompositeOperation="source-over";
描述
source-over默认。在目标图像上显示源图像。
source-atop在目标图像顶部显示源图像。源图像位于目标图像之外的部分是不可见的。
source-in在目标图像中显示源图像。只有目标图像内的源图像部分会显示,目标图像是透明的。
source-out在目标图像之外显示源图像。只会显示目标图像之外源图像部分,目标图像是透明的。
destination-over在源图像上方显示目标图像。
destination-in在源图像中显示目标图像。只有源图像内的目标图像部分会被显示,源图像是透明的。
destination-atop在源图像顶部显示目标图像。源图像之外的目标图像部分不会被显示。
destination-out在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。
lighter显示源图像 + 目标图像。
copy显示源图像。忽略目标图像。
xor使用异或操作对源图像与目标图像进行组合。

canvas实现的画板组件:gitee.com/wang-jinju/…

canvas实现的时钟:gitee.com/wang-jinju/…

\