UNPKG

vislite

Version:

灵活、快速、简单的数据可视化交互式跨端前端库

184 lines (142 loc) 4.98 kB
# Canvas 画笔 API Canvas 是 VISLite 的核心画笔之一,**绘制 API 完全一致**,但初始化方式因平台而异。 ## 平台初始化方式 ### H5 端 ```js import { Canvas } from 'vislite'; var painter = new Canvas(document.getElementById('root'), { scale: 2, // 缩放倍率,默认2 region: true, // 是否启用区域检测,默认true willReadFrequently: false }, width, height); ``` ### 微信/支付宝小程序 小程序端需要使用 ui-canvas 组件,详见: - [微信小程序 Canvas](miniprogram/ui-canvas.md) - [支付宝小程序 Canvas](minialipay/ui-canvas.md) ### uni-app uni-app 根据编译目标平台选择上述方式,详见: - [uni-app Canvas](uniapp/ui-canvas.md) ## 配置项 (config) ```js painter.config({ fillStyle: 'red', // 填充色 strokeStyle: 'black', // 轮廓色 lineWidth: 1, // 线宽 lineCap: 'butt', // 线端点类型:butt|round|square lineJoin: 'miter', // 线拐角:miter|bevel|round lineDash: [], // 虚线样式 textAlign: 'left', // 文字水平对齐:left|center|right textBaseline: 'middle', // 文字垂直对齐:middle|top|bottom shadowBlur: 0, // 阴影模糊 shadowColor: 'black', // 阴影颜色 fontSize: 16, // 字体大小 fontFamily: 'sans-serif', // 字体 fontWeight: 400, // 字重 fontStyle: 'normal', // 字类型 arcStartCap: 'butt', // 圆弧开始端闭合:butt|round|-round arcEndCap: 'butt', // 圆弧结束端闭合 rectRadius: [10, 10, 10, 10] // 矩形圆角 }); ``` ### 渐变色 ```js // 线性渐变 var gradient = painter.createLinearGradient(x1, y1, x2, y2); gradient.setColor(0, 'red').setColor(1, 'blue'); painter.config({ fillStyle: gradient.value() }); // 环形渐变 var gradient = painter.createRadialGradient(cx, cy, r1, r2); gradient.setColor(0, 'red').setColor(1, 'blue'); // 角度渐变 (1.2.0+) var gradient = painter.createConicGradient(cx, cy, beginDeg, deg); gradient.setColor(0, 'red').setColor(1, 'blue'); ``` ## 文字绘制 ```js painter.fillText(text, x, y, deg); // 填充文字 painter.strokeText(text, x, y, deg); // 轮廓文字 painter.fullText(text, x, y, deg); // 填充+轮廓文字 // 多行文字 painter.fillTexts(contents, x, y, width, lineHeight, deg); painter.strokeTexts(contents, x, y, width, lineHeight, deg); painter.fullTexts(contents, x, y, width, lineHeight, deg); // 计算文字宽度 painter.textWidth(text); ``` ## 路径操作 ```js painter.beginPath(); // 开始路径 painter.closePath(); // 闭合路径 painter.moveTo(x, y); // 移动起点 painter.lineTo(x, y); // 画线 painter.arc(x, y, r, beginDeg, deg); // 圆弧 painter.quadraticCurveTo(cpx, cpy, x, y); // 二次贝塞尔 painter.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); // 三次贝塞尔 painter.fill(); // 填充 painter.stroke(); // 描边 painter.full(); // 填充+描边 painter.clip(); // 裁剪 ``` ## 画布操作 ```js painter.save(); // 保存状态 painter.restore(); // 恢复状态 painter.clearRect(x, y, w, h); // 清除矩形区域 painter.clearCircle(cx, cy, r); // 清除圆形区域 // 缩放 painter.scale(x, y); // 获取画布信息 painter.getInfo(); // { width, height } // 获取原始画布上下文 painter.getContext(); // CanvasRenderingContext2D ``` ## 区域交互 ```js // 设置当前绑定的区域名称 painter.setRegion('regionName'); // 获取点击所在的区域名称 painter.getRegion(x, y).then(regionName => { console.log(regionName); }); // 绑定点击事件 painter.bind('click', (regionName, x, y) => { console.log(regionName, x, y); }); // 只绘制区域(用于交互检测) painter.onlyRegion(true); // 只绘制视图 painter.onlyView(true); ``` ## 图形绘制(便捷方法) ```js // 圆 painter.fillCircle(x, y, r); // 填充圆 painter.strokeCircle(x, y, r); // 描边圆 painter.fullCircle(x, y, r); // 填充+描边圆 // 矩形 painter.fillRect(x, y, w, h); painter.strokeRect(x, y, w, h); painter.fullRect(x, y, w, h); // 圆环 (1.1.0+) painter.fillRing(x, y, r1, r2); painter.strokeRing(x, y, r1, r2); painter.fullRing(x, y, r1, r2); // 椭圆 (1.1.0+) painter.fillEllipse(x, y, r1, r2, deg); painter.strokeEllipse(x, y, r1, r2, deg); ``` ## 导出 ```js // 导出为图片 painter.toDataURL(type, encoderOptions).then(dataUrl => { // dataUrl 即为 base64 图片 }); ``` ## 重置 ```js // 重置为默认配置 painter.reset(); // 带自定义配置重置 painter.reset({ fillStyle: 'blue', fontSize: 20 }); ```