创建
A drawing of something.
使用 getContext() 方法可以获取对绘图上下文的引用。对于平面图形,需要给这个方法传入参数“2d”,表示要获取 2D 上下文对象:
const drawing = document.getElementById('drawing')
// 确保浏览器支持 canvas
if (drawing.getContext) {const canvas = drawing.getContext('2d')// 其他代码
}
可以使用 toDataURL() 方法导出
const drawing = document.getElementById('drawing')
// 确保浏览器支持 canvas
if (drawing.getContext) {// 取得图像的数据 URIconst imageURI = drawing.toDataURL('image/png')// 显示图片const image = document.creatElement('img')image.src = imageURIdocument.body.appendChild(image)
}
填充以指定样式(颜色、渐变或图像)自动填充形状,而描边只为图形边界着色。显示效果取决于两个属性:fillStyle 和 strokeStyle。
这两个属性可以是字符串、渐变对象或图案对象,默认值都为“#000000”。字符串表示颜色值,可以是 CSS 支持的任一格式:名称、十六进制代码、rgb、rgba、hsl 或 hsla。比如:
const drawing = document.getElementById('drawing')
// 确保浏览器支持 canvas
if (drawing.getContext) {const canvas = drawing.getContext('2d')canvas.fillStyle = 'red'canvas.strokeStyle = '#0000ff'
}
方法有3个:fillRect()、strokeRect() 和 clearRect()。这些方法都接收4个参数:矩形 x 坐标、矩形 y 坐标、矩形宽度和矩形高度。
const drawing = document.getElementById('drawing')if (drawing.getContext) {const canvas = drawing.getContext('2d')// 绘制红色矩形canvas.fillStyle = '#ff0000'canvas.fillRect(10, 10, 50, 50)// 绘制半透明蓝色矩形canvas.fillStyle = 'rgba(0, 0, 255, 0.5)'canvas.fillRect(30, 30, 50, 50)
}
绘制效果如下:
const drawing = document.getElementById('drawing')if (drawing.getContext) {const canvas = drawing.getContext('2d')// 绘制红色轮廓的矩形canvas.strokeStyle = '#ff0000'canvas.strokeRect(10, 10, 50, 50)// 绘制半透明蓝色轮廓的矩形canvas.strokeStyle = 'rgba(0, 0, 255, 0.5)'canvas.strokeRect(30, 30, 50, 50)
}
绘制效果如下:
描边宽度由 lineWidth 属性控制,它可以是任意整数值。类似地,lineCap 属性控制线条端点的形状[“butt”(平头)、“round”(出圆头)或“square”(出方头)],而 lineJoin 属性控制线条交点的形状[“round”(圆转)、“bevel”(取平)或“miter”(出尖)]。
擦除画布中某个区域
const drawing = document.getElementById('drawing')if (drawing.getContext) {const canvas = drawing.getContext('2d')// 绘制红色矩形canvas.fillStyle = '#ff0000'canvas.fillRect(10, 10, 50, 50)// 绘制半透明蓝色矩形canvas.fillStyle = 'rgba(0, 0, 255, 0.5)'canvas.fillRect(30, 30, 50, 50)// 在前两个矩形重叠的区域上擦除一个矩形区域canvas.clearRect(40, 40, 10, 10)
}
绘制效果如下:
要绘制路径,必须首先调用 beginPath() 方法以表示要开始绘制新路径。然后,再调用下列方法来绘制路径:
创建路径之后,可以使用 closePath() 方法绘制一条返回起点的线
const drawing = document.getElementById('drawing')if (drawing.getContext) {const canvas = drawing.getContext('2d')// 创建路径canvas.beginPath()// 绘制外圆canvas.arc(100, 100, 99, 0, 2 * Math.PI)// 绘制内圆canvas.moveTo(194, 100)canvas.arc(100, 100, 94, 0, 2 * Math.PI)// 绘制分针canvas.moveTo(100, 100)canvas.lineTo(100, 15)// 绘制时针canvas.moveTo(100, 100)canvas.lineTo(35, 100)// 描画路径canvas.stroke()
}
绘制效果如下:
提供了 fillText() 和 strokeText() 两个方法。都接收4个参数:要绘制的字符串、x 坐标、y 坐标和可选的最大像素宽度。而且,这两个方法最终绘制的结果都取决于以下3个属性:
这些属性都有相应的默认值,因此没必要每次绘制文本时都设置它们。fillText() 方法使用 fillStyle 属性绘制文本,而 strokeText() 方法使用 strokeStyle 属性
// 正常
canvas.font = '14px Arial'
canvas.textAlign = 'center'
canvas.textBaseLine = 'middle'
canvas.fillText('12', 100, 20)// 与开头对齐
canvas.textBaseLine = 'start'
canvas.fillText('12', 100, 40)// 与末尾对齐
canvas.textBaseLine = 'end'
canvas.fillText('12', 100, 60)
可以根据以下属性值自动为已有形状或路径生成阴影
canvas.shadowColor = 'rgba(0, 0, 0, 0.5)'
canvas.shadowOffsetX = 5
canvas.shadowOffsetY = 5
canvas.shadowBlur = 4
调用上下文的 createLinearGradient() 方法。这个方法接收4个参数:起点 x 坐标、起点 y 坐标、终点 x 坐标和终点 y 坐标。调用之后,会以指定大小创建一个新的 CanvasGradient 对象并返回实例
有了 gradient 对象后,接下来要使用 addColorStop() 方法为渐变指定色标。这个方法接收两个参数:色标位置和 CSS 颜色字符串。色标位置通过 0 ~ 1 范围内的值表示,0 是第一种颜色,1 是最后一种颜色。比如:
const gradient = canvas.createLinearGradient(30, 30, 70, 70)
gradient.addColorStop(0, 'white')
gradient.addColorStop(1, 'black')