codecamp

百度智能小程序API 绘图

简介


解释:canvas 画布,可使用 JS 操作 canvas 上下文,发出指令,进行绘制。

SWAN模板写法示例:

<canvas canvas-id="myCanvas" />
JS写法示例:
Page({
    onReady: function () {
        const ctx = this.createCanvasContext('myCanvas');
        ctx.setFillStyle('#ff0000');
        ctx.arc(100, 100, 50, 0, 2 * Math.PI);
        ctx.fill();
        ctx.draw();
    }
});
我们来回顾一下,刚刚都执行了哪些指令:

1、创建绘图上下文

推荐使用 Page 对象上挂载的createCanvasContext方法,进行绘制上下文的创建:

Page({
    onReady: function () {
        const ctx = this.createCanvasContext('myCanvas');
	}
});

当然,也可以使用 SWAN 上挂载的createCanvasContext方法。如下,我们调用 SWAN 的接口createCanvasContext创建了一个绘制上下文(但请注意,使用 SWAN 上挂载的createCanvasContext,会在当前用户可见的 Page 中寻找canvas)。

const ctx = swan.createCanvasContext('myCanvas');
2、发送绘制指令

设置颜色,并画一个圆,填充。

ctx.setFillStyle('#ff0000');
ctx.arc(100, 100, 50, 0, 2 * Math.PI);
ctx.fill();

3、绘制执行上面已经发出的指令,进行 canvas 绘制。

ctx.draw();

坐标系


canvas 坐标系,以左上角为(0, 0),横轴为 x,纵轴为 y。如:ctx.arc(100, 200, 50, 0, 2 * Math.PI);命令,就是在x: 100, y: 200为圆心处,开始画圆。

createCanvasContext


解释:在 Page 中,推荐使用this.createCanvasContext(canvasId),进行绘图上下文的创建。

Tips:

也可使用swan.createCanvasContext(canvasId),但使用swan.createCanvasContext(canvasId)进行创建时,并非在执行所在的 Page 对象中使用 canvasId 进行查找,而是在用户当前可视的 Page 中使用 canvasId 进行查找。

canvasContext.setFillStyle


解释:设置填充色。

参数:

参数名 类型 必填 说明
color Color 设置的填充颜色

示例:

const ctx = this.createCanvasContext('myCanvas');
ctx.setFillStyle('blue');
ctx.fillRect(30, 30, 150, 75);
ctx.draw();
201807091743061893

canvasContext.setStrokeStyle


解释:设置边框颜色。

参数:

参数名 类型 必填 说明
color Color 设置的边框颜色

示例:

const ctx = this.createCanvasContext('myCanvas');
ctx.setStrokeStyle('blue');
ctx.strokeRect(30, 30, 150, 75);
ctx.draw();
201807091743066362

canvasContext.setShadow


解释:设置阴影样式。

参数:

参数名 类型 范围 说明
offsetX Number 阴影相对于形状在水平方向的偏移
offsetY Number 阴影相对于形状在竖直方向的偏移
blur Number 1 ~ 100 阴影的模糊级别,数值越大越模糊
color Color 阴影的颜色

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.setFillStyle('blue');
ctx.setShadow(10, 50, 50, 'red');
ctx.fillRect(30, 30, 150, 75);
ctx.draw();
201807091743073242

canvasContext.createLinearGradient


解释:创建一个线性的渐变颜色。

参数:

参数名 类型 说明
x0 Number 起点的 x 坐标
y0 Number 起点的 y 坐标
x1 Number 阴影的模糊级别,数值越大越模糊
y1 Number 阴影的颜色

示例:

const ctx = this.createCanvasContext('myCanvas');

// Create linear gradient
const grd = ctx.createLinearGradient(0, 0, 200, 0);
grd.addColorStop(0, 'blue');
grd.addColorStop(1, 'red');

// Fill with gradient
ctx.setFillStyle(grd);
ctx.fillRect(30, 30, 150, 80);
ctx.draw();
201807091743072594

canvasContext.createCircularGradient


解释:创建一个圆形的渐变颜色。

参数:

参数名 类型 说明
x Number 圆心的 x 坐标
y Number 圆心的 y 坐标
r Number 圆的半径

示例:

const ctx = swan.createCanvasContext('myCanvas');

// Create circular gradient
const grd = ctx.createCircularGradient(75, 50, 50);
grd.addColorStop(0, 'red');
grd.addColorStop(1, 'blue');

// Fill with gradient
ctx.setFillStyle(grd);
ctx.fillRect(30, 30, 150, 80);
ctx.draw();
201807091743073315

canvasContext.addColorStop


解释:创建一个颜色的渐变点。

参数:

参数名 类型 说明
stop Number(0-1) 表示渐变点在起点和终点中的位置
color Color 渐变点的颜色

示例:

const ctx = swan.createCanvasContext('myCanvas');

// Create circular gradient
const grd = ctx.createLinearGradient(30, 10, 120, 10);
grd.addColorStop(0, 'red');
grd.addColorStop(0.16, 'orange');
grd.addColorStop(0.33, 'yellow');
grd.addColorStop(0.5, 'green');
grd.addColorStop(0.66, 'cyan');
grd.addColorStop(0.83, 'blue');
grd.addColorStop(1, 'purple');

// Fill with gradient
ctx.setFillStyle(grd);
ctx.fillRect(30, 30, 150, 80);
ctx.draw();
201807091743076946

Bug & Tip:1、addColorStop 目前在 Android 有bug。

canvasContext.setLineWidth


解释:设置线条的宽度。

参数:

参数名 类型 说明
lineWidth Number 线条的宽度(单位是 px)

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.beginPath();
ctx.moveTo(30, 10);
ctx.lineTo(200, 10);
ctx.stroke();

ctx.beginPath();
ctx.setLineWidth(5);
ctx.moveTo(50, 30);
ctx.lineTo(200, 30);
ctx.stroke();

ctx.beginPath();
ctx.setLineWidth(10);
ctx.moveTo(70, 50);
ctx.lineTo(200, 50);
ctx.stroke();

ctx.beginPath();
ctx.setLineWidth(15);
ctx.moveTo(90, 70);
ctx.lineTo(200, 70);
ctx.stroke();

ctx.draw();
201807091743073471

canvasContext.setLineCap


解释:设置线条的端点样式。

参数:

参数名 类型 范围 说明
lineCap String ‘butt’、’round’、’square’ 线条的结束端点样式

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.beginPath();
ctx.moveTo(30, 10);
ctx.lineTo(200, 10);
ctx.stroke();

ctx.beginPath();
ctx.setLineCap('butt');
ctx.setLineWidth(10);
ctx.moveTo(50, 30);
ctx.lineTo(200, 30);
ctx.stroke();

ctx.beginPath();
ctx.setLineCap('round');
ctx.setLineWidth(10);
ctx.moveTo(70, 50);
ctx.lineTo(200, 50);
ctx.stroke();

ctx.beginPath();
ctx.setLineCap('square');
ctx.setLineWidth(10);
ctx.moveTo(90, 70);
ctx.lineTo(200, 70);
ctx.stroke();

ctx.draw();
201807091743078084

canvasContext.setLineJoin


解释:设置线条的交点样式。

参数:

参数名 类型 范围 说明
lineJoin String ‘bevel’、’round’、’miter’ 线条的结束交点样式

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.beginPath();
ctx.moveTo(10, 10);
ctx.lineTo(100, 50);
ctx.lineTo(10, 90);
ctx.stroke();

ctx.beginPath();
ctx.setLineJoin('bevel');
ctx.setLineWidth(10);
ctx.moveTo(50, 10);
ctx.lineTo(140, 50);
ctx.lineTo(50, 90);
ctx.stroke();

ctx.beginPath();
ctx.setLineJoin('round');
ctx.setLineWidth(10);
ctx.moveTo(90, 10);
ctx.lineTo(180, 50);
ctx.lineTo(90, 90);
ctx.stroke();

ctx.beginPath();
ctx.setLineJoin('miter');
ctx.setLineWidth(10);
ctx.moveTo(130, 10);
ctx.lineTo(220, 50);
ctx.lineTo(130, 90);
ctx.stroke();

ctx.draw();
201807091743076892

canvasContext.setLineDash


解释:设置线条的宽度。

参数:

参数名 类型 说明
pattern Array 一组描述交替绘制线段和间距(坐标空间单位)长度的数字
offset Number 虚线偏移量

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.setLineDash([10, 20], 5);
ctx.beginPath();
ctx.moveTo(0,100);
ctx.lineTo(400, 100);
ctx.stroke();
ctx.draw();
201807091743073391

canvasContext.setMiterLimit


解释:设置最大斜接长度,斜接长度指的是在两条线交汇处内角和外角之间的距离,当 setLineJoin() 为 miter 时才有效,超过最大倾斜长度的,连接处将以 lineJoin 为 bevel 来显示。

参数:

参数名 类型 说明
miterLimit Number 最大斜接长度

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.beginPath();
ctx.setLineWidth(10);
ctx.setLineJoin('miter');
ctx.setMiterLimit(1);
ctx.moveTo(10, 10);
ctx.lineTo(100, 50);
ctx.lineTo(10, 90);
ctx.stroke();

ctx.beginPath();
ctx.setLineWidth(10);
ctx.setLineJoin('miter');
ctx.setMiterLimit(2);
ctx.moveTo(50, 10);
ctx.lineTo(140, 50);
ctx.lineTo(50, 90);
ctx.stroke();

ctx.beginPath();
ctx.setLineWidth(10);
ctx.setLineJoin('miter');
ctx.setMiterLimit(3);
ctx.moveTo(90, 10);
ctx.lineTo(180, 50);
ctx.lineTo(90, 90);
ctx.stroke();

ctx.beginPath();
ctx.setLineWidth(10);
ctx.setLineJoin('miter');
ctx.setMiterLimit(4);
ctx.moveTo(130, 10);
ctx.lineTo(220, 50);
ctx.lineTo(130, 90);
ctx.stroke();

ctx.draw();
201807091743075052

canvasContext.rect


解释:创建一个矩形。

参数:

参数名 类型 说明
x Number 矩形路径左上角的 x 坐标
y Number 矩形路径左上角的 y 坐标
width Number 矩形路径的宽度
height Number 矩形路径的高度

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.rect(30, 30, 150, 75);
ctx.setFillStyle('blue');
ctx.fill();
ctx.draw();

201807091743083148

canvasContext.fillRect


解释:填充一个矩形。

参数:

参数名 类型 说明
x Number 矩形路径左上角的 x 坐标
y Number 矩形路径左上角的 y 坐标
width Number 矩形路径的宽度
height Number 矩形路径的高度

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.setFillStyle('blue');
ctx.fillRect(30, 30, 150, 75);
ctx.draw();

201807091743085487

canvasContext.strokeRect


解释:画一个矩形(非填充)。

参数:

参数名 类型 说明
x Number 矩形路径左上角的 x 坐标
y Number 矩形路径左上角的 y 坐标
width Number 矩形路径的宽度
height Number 矩形路径的高度

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.setStrokeStyle('blue');
ctx.strokeRect(30, 30, 150, 75);
ctx.draw();

201807091743086026

canvasContext.clearRect


解释:清除画布上在该矩形区域内的内容。

参数:

参数名 类型 说明
x Number 矩形路径左上角的 x 坐标
y Number 矩形路径左上角的 y 坐标
width Number 矩形路径的宽度
height Number 矩形路径的高度

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.setFillStyle('red');
ctx.fillRect(0, 0, 150, 200);
ctx.setFillStyle('blue');
ctx.fillRect(150, 0, 150, 200);
ctx.clearRect(30, 30, 150, 75);
ctx.draw();
201807091743082625

canvasContext.fill


解释:对当前路径中的内容进行填充。默认的填充色为黑色。

参数:无

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.moveTo(100, 100);
ctx.lineTo(10, 100);
ctx.lineTo(10, 10);
ctx.fill();
ctx.draw();
201807091743084980

canvasContext.stroke


解释:画出当前路径的边框。默认颜色为黑色。

参数:无

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.moveTo(100, 100);
ctx.lineTo(10, 100);
ctx.lineTo(10, 10);
ctx.stroke();
ctx.draw();
201807091743086365

canvasContext.beginPath


解释:开始创建一个路径,需要调用 fill 或者 stroke 才会使用路径进行填充或描边。

参数:无

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.rect(10, 10, 100, 30);
ctx.setFillStyle('red');
ctx.fill();
ctx.beginPath();
ctx.rect(10, 40, 100, 30);
ctx.setFillStyle('blue');
ctx.fillRect(10, 70, 100, 30);
ctx.rect(10, 100, 100, 30);
ctx.setFillStyle('green');
ctx.fill();
ctx.draw();
201807091743084640

canvasContext.closePath


解释:关闭一个路径。

参数:无

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.moveTo(100, 100);
ctx.lineTo(10, 100);
ctx.lineTo(10, 10);
ctx.closePath();
ctx.stroke();
ctx.draw();

201807091743084027

canvasContext.moveTo


解释:把路径移动到画布中的指定点,不创建线条。

参数:

参数名 类型 说明
x Number 目标位置的 x 坐标
y Number 目标位置的 y 坐标

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.moveTo(10, 10);
ctx.lineTo(100, 10);
ctx.moveTo(10, 100);
ctx.lineTo(100, 100);
ctx.stroke();
ctx.draw();
201807091743089093

canvasContext.lineTo


解释:lineTo 方法增加一个新点,然后创建一条从上次指定点到目标点的线。

参数:

参数名 类型 说明
x Number 目标位置的 x 坐标
y Number 目标位置的 y 坐标

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.moveTo(10, 10);
ctx.rect(10, 10, 100, 50);
ctx.lineTo(110, 60);
ctx.stroke();
ctx.draw();
201807091743084943

canvasContext.arc


解释:画一条弧线。

参数:

参数名 类型 说明
x Number 圆的 x 坐标
y Number 圆的 y 坐标
r Number 圆的半径
sAngle Number 起始弧度,单位弧度(在3点钟方向)
eAngle Number 终止弧度
counterclockwise Boolean 可选。指定弧度的方向是逆时针还是顺时针。默认是 false,即顺时针。

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.arc(100, 75, 50, 0, 2 * Math.PI);
ctx.setFillStyle('blue');
ctx.fill();
ctx.draw();
201807091743082177

canvasContext.bezierCurveTo


解释:创建三次方贝塞尔曲线路径。

参数:

参数名 类型 说明
cp1x Number 第一个贝塞尔控制点的 x 坐标
cp1y Number 第一个贝塞尔控制点的 y 坐标
cp2x Number 第二个贝塞尔控制点的 x 坐标
cp2y Number 第二个贝塞尔控制点的 y 坐标
x Number 结束点的 x 坐标
y Number 结束点的 y 坐标

示例:

const ctx = swan.createCanvasContext('myCanvas');
// Draw quadratic curve
ctx.beginPath();
ctx.moveTo(20, 20);
ctx.bezierCurveTo(20, 100, 200, 100, 200, 20);
ctx.setStrokeStyle('black');
ctx.stroke();

ctx.draw();
201807091743093043

canvasContext.quadraticCurveTo


解释:创建二次贝塞尔曲线路径。

参数:

参数名 类型 说明
cpx Number 贝塞尔控制点的 x 坐标
cpy Number 贝塞尔控制点的 y 坐标
x Number 结束点的 x 坐标
y Number 结束点的 y 坐标

示例:

const ctx = swan.createCanvasContext('myCanvas');
// Draw quadratic curve
ctx.beginPath();
ctx.moveTo(20, 20);
ctx.quadraticCurveTo(20, 100, 200, 20);
ctx.setStrokeStyle('blue');
ctx.stroke();

ctx.draw();
201807091743091816

canvasContext.save


解释:保存当前的绘图上下文。

参数:无

示例:

const ctx = swan.createCanvasContext('myCanvas');
// save the default fill style
ctx.save();
ctx.setFillStyle('blue');
ctx.fillRect(10, 10, 150, 100);

// restore to the previous saved state
ctx.restore();
ctx.fillRect(50, 50, 150, 100);

ctx.draw();
201807091743096618

canvasContext.restore


解释:恢复之前保存的绘图上下文。

参数:无

示例:

const ctx = swan.createCanvasContext('myCanvas');
// save the default fill style
ctx.save();
ctx.setFillStyle('blue');
ctx.fillRect(10, 10, 150, 100);

// restore to the previous saved state
ctx.restore();
ctx.fillRect(50, 50, 150, 100);

ctx.draw();
201807091743096618

canvasContext.draw


解释:将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中。

参数:

参数名 类型 说明
callback Function 绘制完成后回调

示例:

const ctx = swan.createCanvasContext('myCanvas');
ctx.setFillStyle('blue');
ctx.fillRect(10, 10, 150, 100);
ctx.draw();
ctx.fillRect(30, 30, 150, 100);
ctx.draw();
201807091743099128
百度智能小程序API 位置
百度智能小程序API 界面
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

百度智能小程序开发文档

百度智能小程序 组件

百度智能小程序 地图

百度智能小程序 画布

百度智能小程序 API

百度智能小程序 界面

百度智能小程序 关注小程序引导组件

百度智能小程序 自定义组件

百度智能小程序 媒体

百度智能小程序 设备

百度智能小程序 拨打电话

百度智能小程序 内存警报

百度智能小程序 手机联系人

百度智能小程序 用户截屏事件

百度智能小程序 第三方平台

百度智能小程序 开放接口

百度智能小程序 百度收银支付

百度智能小程序 分包预下载

百度智能小程序 数据分析

百度智能小程序 服务端

百度智能小程序 云开发

百度智能小程序 初始化

百度智能小程序 云函数

百度智能小程序 服务端初始化

百度智能小程序 服务器获取上下文

百度智能小程序 服务端云函数

百度智能小程序 开发教程

百度智能小程序 功能开发

百度智能小程序 基本原理

百度智能小程序 小程序自动化

百度智能小程序 视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }