公司要上活動。一種相似刮刮獎的洗車遊戲。網上查找了一些代碼和思路,本身也來模仿一個。個人思路以下: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就是能夠經過查看元素就能看到最終結果。固然這只是提供一個思路了。因此有什麼更好的方法你們能夠告訴我。