// 已弃用 let ctx = null let systemInfo = null let canvasW = 0 // 画布宽度 px let canvasH = 0 // 画布高度 px let scale = 1.0 // 地图缩放比例 export default { async initCanvas(canvasId, instance) { ctx = uni.createCanvasContext(canvasId, instance) // 获取设备信息,主要获取宽度,赋值给canvasW 也就是宽度:100% let [err, systemInfo] = await uni.getSystemInfo() // systemInfo = await this.getSystemInfo() console.log("[initCanvas] systemInfo", systemInfo) canvasW = systemInfo.windowWidth; // 画布宽度 canvasH = systemInfo.windowHeight - 60; // 画布高度 console.log("[initCanvas] ", canvasW, canvasH) }, async handleDrawMap(mapUrl) { this.drawMapBg(mapUrl) // await this.draw(false) let posArr = [ { x: canvasW / 2, y: canvasH / 2, color: 'red' }, { x: 100, y: 100, color: 'green' }, { x: 300, y: 300, color: '' } ] let radius = 20 this.drawPosArr(posArr, radius) this.drawPosArr(posArr, 30) ctx.strokeRect(100, 10, 150, 100) // 以原点为中心,原点可以用 translate方法修改。顺时针旋转当前坐标轴。多次调用rotate,旋转的角度会叠加。 // rotate Number 旋转角度,以弧度计(degrees * Math.PI/180;degrees范围为0~360) ctx.rotate(20 * Math.PI / 180) // 在调用scale方法后,之后创建的路径其横纵坐标会被缩放。多次调用scale,倍数会相乘。 ctx.scale(2, 2) ctx.strokeRect(100, 10, 150, 100) ctx.rotate(-20 * Math.PI / 180) ctx.setLineDash([20, 30], 20) ctx.beginPath() ctx.moveTo(0,100) ctx.lineTo(600, 100) ctx.stroke() await this.draw() }, drawMapBg(mapUrl) { // 填充背景色,白色 // ctx.setFillStyle('#fff'); // 默认白色 // ctx.fillRect(0, 0, canvasW, canvasH) // fillRect(x,y,宽度,高度) console.log("[drawMapBg] ", canvasW, canvasH) // ctx.drawImage(mapUrl, 0, 0, 1180, 666) // drawImage(图片路径,x,y,绘制图像的宽度,绘制图像的高度) ctx.drawImage(mapUrl, 0, 0, canvasW, canvasH) // drawImage(图片路径,x,y,绘制图像的宽度,绘制图像的高度) }, // x Number 圆的x坐标 // y Number 圆的y坐标 // r Number 圆的半径 drawPos(x, y, r, color = 'blue') { // ctx.setFillStyle('#ff0000'); // 默认白色 // ctx.fillRect(0, 0, 100, 200) // fillRect(x,y,宽度,高度) ctx.beginPath() ctx.setLineWidth(3) ctx.arc(x, y, r, 0, 2 * Math.PI) ctx.setStrokeStyle(color) ctx.stroke() }, drawPosArr(posArr, radius, defaultColor = 'blue') { for (var i = 0; i < posArr.length; i++) { let color = (posArr[i].color != '') ? posArr[i].color : defaultColor this.drawPos(posArr[i].x, posArr[i].y, radius, color) } }, async draw(reserve = true) { // draw方法 把以上内容画到 canvas 中 ctx.draw(reserve, (ret) => { console.log("[draw] 绘制完成") // uni.showToast({ // icon: 'success', // mask: true, // title: '绘制完成', // }); }); }, // 获取图片信息 getImageInfo(image) { return new Promise((req, rej) => { uni.getImageInfo({ src: image, success: function(res) { req(res) }, }); }) }, // 获取设备信息 getSystemInfo() { return new Promise((req, rej) => { uni.getSystemInfo({ success: function(res) { req(res) } }); }) }, }