原来写刮刮卡这么简单,几行代码就搞定,你来你也行,谢谢惠顾!

利用属性属性 globalCompositeOperation,设置值为 destination-out,后绘制的图形会擦除与先绘制图形重叠的部分

效果图:

思路

1.写一个div,div的内容就是刮开后的结果;

2.画布设置好定位,将div盖住(此时是透明的);

3.在画布上画一个长方形,并使用颜色(这里使用默认的黑色),这就把卡盖住了;

4.设置globalCompositeOperation属性为destination-out;

4.为画布添加鼠标移动事件,在鼠标的位置画一个小圆,就会达到擦除的效果了

完整代码

<!DOCTYPE html>
<html>
	<head lang="en">
		<meta charset="GBK">
		<title></title>
		<style>
*{
    margin: 0;
    padding: 0;
}
canvas{
	position: absolute;
	left:200px;
	border:1px solid ;
    top: 10px;
    cursor: pointer;
}
#guaguaka{
	position:absolute;
	left:200px;
	width: 200px;
    height: 60px;
    top: 10px;
    font-size: 40px;
    text-align:center;
}

</style>
	</head>
	<body>
		<div id='guaguaka'>
			谢谢惠顾
		</div>
		<canvas id='canvas'></canvas>
	<script type="text/javascript">
  var canvas = document.getElementById('canvas')
  var W = canvas.width = 200
  var H = canvas.height = 60
  var ctx = canvas.getContext('2d');

  draw();
  function draw(){
  	ctx.beginPath();
  	//绘制一个方形,用来覆盖刮刮卡的内容
  	ctx.fillRect(0,0,W,H);
  	ctx.globalCompositeOperation='destination-out';//后绘制的图形会擦除与先绘制图形重叠的部分
  }
  
  canvas.addEventListener('mousemove',function(event){
  	ctx.beginPath();
  	//鼠标移动的地方就绘制一个小圆,因为globalCompositeOperation设定了destination-out,那这个小圆会擦除之前覆盖方形的部分区域,这样就达到了刮开的效果
  	ctx.arc(event.offsetX,event.offsetY,10,0,2*Math.PI);
  	ctx.fill();
  })
	
</script>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/dkm123456/article/details/113181216