公司要上活动。一种相似刮刮奖的洗车游戏。网上查找了一些代码和思路,本身也来模仿一个。个人思路以下:css
在一div中随机放入一些信息(如:谢谢惠顾,中奖了),而后用canvas画布遮盖此div。经过刮掉画布上的颜色层,下面的信息就显示出来了。canvas
一些css样式:浏览器
*{ padding: 0; margin: 0; } .canvas-box{ width: 300px; height: 400px; margin: auto; border: 1px dashed deeppink; margin-top: 20px; font-size: 50px; text-align: center; line-height: 400px; position: relative; } #canvas{ position: absolute; left: 0; top: 0; }
dom结构:app
<div class="canvas-box"> <canvas id="canvas" width="300" height="400">您的的浏览器太尼玛旧了,请更换或升级浏览器!</canvas> </div>
js代码:dom
var canvas=document.getElementById("canvas"); var canvasBox=document.getElementsByClassName("canvas-box")[0]; var finger;//触摸屏幕手指 var whiteZone=0;//刮掉的区域 var pen=canvas.getContext("2d"); var textArr=['谢谢惠顾!','谢谢惠顾!','谢谢惠顾!','谢谢惠顾!','谢谢惠顾!',"恭喜中奖!","恭喜中奖!","恭喜中奖!","恭喜中奖!","恭喜中奖!"]; var W=canvas.offsetWidth; var H=canvas.offsetHeight; var dataList; canvasBox.appendChild(document.createTextNode(textArr[Math.floor(Math.random()*10)])); // 这里必定要闭合路径,防止相互影响 pen.beginPath(); pen.fillStyle="#ccc"; pen.fillRect(0,0,500,500); pen.closePath(); //规定元素相互重叠时如何表现 当前为重叠部分透明 pen.globalCompositeOperation="destination-out"; // 给canvas添加事件,手指移动时得到手指位置,以此位置不断画圆 canvas.addEventListener("touchmove",function(e){ //e.touches为手指列表,[0]为第一个 finger= e.touches[0]; pen.beginPath(); pen.arc(finger.pageX,finger.pageY,15,0,Math.PI*2); pen.fill(); pen.closePath(); }) //手指放开的时候去计算挂掉的区域占总区域的百分比。大于70%提示ok //getImageData方法获取像素点。其中前两个参数分别为获取像素区域的左上角X Y坐标。后两个参数为像素区域的高和宽。 //遍历每一个像素点,值为0则是刮掉的像素点 canvas.addEventListener("touchend",function(){ dataList= pen.getImageData(0,0,300,400); for(var i=0;i<dataList.data.length;i++){ if(dataList.data[i]==0){ whiteZone++; } } if(whiteZone>=dataList.data.length*0.7){ alert("ok!!") } },false)
这里有个小bug就是能够经过查看元素就能看到最终结果。固然这只是提供一个思路了。因此有什么更好的方法你们能够告诉我。