uni-app使用Canvas实现刮刮乐效果

uni-app使用canvas实现刮刮乐效果

在uni-app中使用canvas比较简单,官方参考文档写的非常详细。但是uni-app使用canvas真的有很多坑,所有单独记录下自己的爬坑之旅。

draw()方法

uni-app设计 的draw()方法绘制canvas图像真的是非常的坑,绘制同一幅图像只能使用一次draw()方法,因此要实现擦除效果必须每次都擦除完然后再清楚原有的图像重新绘制新的图像。这样一遍一遍的循环才能实现擦除。

每次按下的时候都绘制一个新的矩形区域

监听canvas区域触摸开始事件,这个时候重新配置canvas参数。但是这个时候不能调用draw()方法。一旦调用,矩形区域绘制完毕,将不可擦除。【这点真的是非常坑】

start:function(){  //触摸开始
			this.ctx = uni.createCanvasContext('cvs');
			this.ctx.setStrokeStyle('#00ff00');
			this.ctx.setFillStyle('#f60');
			this.ctx.fillRect(0,0,300,150);
			//this.ctx.draw()
		},

通过触摸移动来清除绘制

清除绘制直接调用this.ctx.clearRect(x,y,10,10);其中x,y是起点坐标。
但是触摸移动会一致调用touchmove事件,因此这里也不能调用draw()方法。
这时需要记录下触摸的轨迹,即将x,y存储起来,用于标记擦除区域。

触摸结束绘制canvas

再触摸结束的时候调用draw()方法完成整个矩形区域的绘制。

程序如下

		start:function(){
			this.ctx = uni.createCanvasContext('cvs');
			this.ctx.setStrokeStyle('#00ff00');
			this.ctx.setFillStyle('#f60');
			this.ctx.fillRect(0,0,300,150);
			//this.ctx.draw()
		},
		move:function(e){
			var x1 = e.touches[0].x;
			var y1 = e.touches[0].y;
			this.x.push(x1);
			this.y.push(y1);
		},
		end:function(){
			var x = [...this.x];
			var y = [...this.y]
			var xlen = this.x.length;
			var ylen = this.y.length;
			for(let i = 0; i<xlen; i++){
				for(let j = 0; j<ylen; j++){
					this.ctx.clearRect(x[j],y[j],10,10);
				}
			}
			this.ctx.draw();
		}

思路总结

简单的说整个过程就是每次按下的时候都绘制一个矩形区域,但是不调用draw()完成绘制,再触摸移动端额时候将移动轨迹记录下来,再将轨迹转换为要擦除的区域。最后在触摸结束的时候在调用draw()完成绘制。也就是第一次只差A区域,第二次重新绘制同时插除A区域+B区域,以此类推第三次擦除A+B+C区域。知道全部擦除或放弃擦除。
当然以上只是个人一些想法和实现的思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingyong.g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值