触摸操作,刮奖

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, maximum-scale=1.0">
<style type="text/css">
body {
	background:#F39C12;
	text-align:center;
	margin:40px;
	color:#FFF;
	font-family:sans-serif;
}
img{
	width:200px;
}
h1{
	font-size:50px;
	margin-bottom:10px;
}
#guajiang{
	width:240px;
	height:65px;
	background:url(result.png) no-repeat;
	background-size:240px 65px;
	margin:0 auto;
}
</style>
</head>

<body>
<img src="bg.png">
<h1>刮一刮</h1>
<div id="guajiang">
  <canvas width="240" height="65" id="mask"></canvas>
</div>
<p id="status">请在以上的刮奖区刮奖</p>
<script type="text/javascript">
var canvas=document.getElementById("mask");
var context=canvas.getContext("2d");
context.fillStyle="#D1D1D1";
context.fillRect(0,0,240,65);
context.globalCompositeOperation = 'destination-out';
canvas.addEventListener('touchmove', function(event) { //当手指在画布上移动时
		event.preventDefault(); //先去除默认的响应行为
		var touch = event.touches[0]; //获取触摸的第一个点
		context.beginPath(); //开始路径的绘制
		//pageX是针对整个界面的坐标,要减去自身画布的x坐标,原点坐标,半径,起始角度
		context.arc(touch.pageX-canvas.offsetLeft,touch.pageY-canvas.offsetTop,20,0,Math.PI*2); //在所触摸处绘制圆形,半径为20像素
		context.closePath(); //结束路径绘制
		context.fillStyle="#BDC3C7"; //随意设置一种绘制颜色
		context.fill(); //填充该颜色
		var imgData = context.getImageData(0,0,240,65); //获取画布中的所有像素
		var pixelsArr = imgData.data; //得到像素的字节数据
		var loop = pixelsArr.length; //获取该数据的长度
		var transparent = 0; //设置一个变量来记录已经变为透明的像素点的数量
		for (var i = 0; i < loop; i += 4) { //循环遍历每一个像素
			var alpha = pixelsArr[i + 3]; //获取每个像素的透明度数值
			if (alpha < 10) { //当透明度小于10时,认为它已经被擦除
				transparent++; //使transparent加1
			}
		}
		var percentage = transparent / (loop / 4); //计算透明像素在所有像素点中所占的比例
		if(percentage>.9){ //当该比例大于90%时
			document.getElementById("status").innerHTML = "刮奖结束!"; //显示刮奖结束字样
		}
});
</script>
</body>
</html>

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值