收藏
回答

canvas一般有时候正常有时候异常什么原因?

const drawCanvas = (canvasId, _this, dataObj) => {
	// 处理数据
	const data = JSON.parse(JSON.stringify(dataObj))
	demoList[0].value = data.levelOne ?? 0
	demoList[1].value = data.levelTwo ?? 0
	demoList[2].value = data.levelThree ?? 0
	uni.createSelectorQuery().select(canvasId).fields({
		node: true,
		size: true
	}).exec(res => {
		const {
			devicePixelRatio,
			screenWidth
		} = uni.getSystemInfoSync()
		const rpx = devicePixelRatio
		const canvas = res[0].node
		let ctx = canvas.getContext('2d')
		// 初始化画布大小
		canvas.width = res[0].width * rpx
		canvas.height = res[0].height * rpx
		// 获取结束
		const x = res[0].width / 2 * rpx;
		const y = res[0].height / 2 * rpx;
		const lineWidth = 20 * rpx;
		const radius = (res[0].height / 2) * rpx - (lineWidth / 2) // 半径
		const sumResult = canvasId === '#chart' ? data.errorTotal : data.alertTotal;
		let startAngle = 0;
		demoList.map(item => {
			// 绘制数组中的百分比
			ctx.beginPath();
			console.log('sum',sumResult)
			let angle = (item.value / sumResult) * 2 * Math.PI
			ctx.arc(x, y, radius, startAngle, startAngle + angle);
			ctx.lineWidth = lineWidth;
			ctx.strokeStyle = item.color;
			ctx.stroke();
			startAngle += angle
		})
		// 文字颜色
		ctx.fillStyle = "#1D2129"
		ctx.font = `${30 * rpx}px sans-serif`
		ctx.textAlign = 'center'
		// // 文字位置
		// // 插入文字
		ctx.fillText(sumResult, canvas.width / 2, y)
		// // 文字大小
		ctx.fillStyle = "#86909C"
		ctx.font = `${12 * rpx}px sans-serif`
		ctx.textAlign = 'center'
		// // 文字颜色
		// // 插入文字
		ctx.fillText('故障总计(台)', canvas.width / 2, y + (20 * rpx))


		uni.canvasToTempFilePath({
			canvas: canvas,
			success: function(res) {
				if (canvasId === '#chart') {
					canvasSrc1.value = res.tempFilePath;
				} else {
					canvasSrc2.value = res.tempFilePath;
				}
			},
			fail: function(res) {
				console.log(222, res)
			}
		})
	})
}
回答关注问题邀请回答
收藏

2 个回答

  • Demons
    Demons
    05-15

    请具体描述问题出现的流程,并提供能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    05-15
    有用
    回复
  • Han.
    Han.
    05-14
    // 页面部分
    
    
    
    // 是这么调用的,目前数据部分先写死了
    const getCard2Date = async (id) => {
    	const {
    		data
    	} = await getDeviceOverview2(id)
    	card2Data = Object.assign(card2Data, {
    		errorTotal: 80,
    		levelOne: 10,
    		levelTwo: 40,
    		levelThree: 30
    	})
    	drawCanvas('#chart', this, card2Data)
    }
    const getCard3Date = async (id) => {
    	const {
    		data
    	} = await getDeviceOverview3(id)
    	card3Data = Object.assign(card3Data, {
    		alertTotal: 100,
    		levelOne: 24,
    		levelThree: 0,
    		levelTwo: 76
    	})
    	drawCanvas('#chart2', this, card3Data)
    }
    


    感觉两个值会互相影响结果不知道为什么,代码上感觉已经独立开了呀。。

    05-14
    有用
    回复
登录 后发表内容