资讯专栏INFORMATION COLUMN

基于canvas的刮刮奖

LuDongWei / 1555人阅读

摘要:一种类似刮刮奖的洗车游戏。我的思路如下在一中随机放入一些信息如谢谢惠顾,中奖了,然后用画布遮盖此。通过刮掉画布上的颜色层,下面的信息就显示出来了。其中前两个参数分别为获取像素区域的左上角坐标。后两个参数为像素区域的高和宽。

公司要上活动。一种类似刮刮奖的洗车游戏。网上查找了一些代码和思路,自己也来模仿一个。我的思路如下:

在一div中随机放入一些信息(如:谢谢惠顾,中奖了),然后用canvas画布遮盖此div。通过刮掉画布上的颜色层,下面的信息就显示出来了。

一些css样式:

</>复制代码

  1. *{
  2. padding: 0;
  3. margin: 0;
  4. }
  5. .canvas-box{
  6. width: 300px;
  7. height: 400px;
  8. margin: auto;
  9. border: 1px dashed deeppink;
  10. margin-top: 20px;
  11. font-size: 50px;
  12. text-align: center;
  13. line-height: 400px;
  14. position: relative;
  15. }
  16. #canvas{
  17. position: absolute;
  18. left: 0;
  19. top: 0;
  20. }

dom结构:

</>复制代码

  1. 您的的浏览器太尼玛旧了,请更换或升级浏览器!

js代码:

</>复制代码

  1. var canvas=document.getElementById("canvas");
  2. var canvasBox=document.getElementsByClassName("canvas-box")[0];
  3. var finger;//触摸屏幕手指
  4. var whiteZone=0;//刮掉的区域
  5. var pen=canvas.getContext("2d");
  6. var textArr=["谢谢惠顾!","谢谢惠顾!","谢谢惠顾!","谢谢惠顾!","谢谢惠顾!","恭喜中奖!","恭喜中奖!","恭喜中奖!","恭喜中奖!","恭喜中奖!"];
  7. var W=canvas.offsetWidth;
  8. var H=canvas.offsetHeight;
  9. var dataList;
  10. canvasBox.appendChild(document.createTextNode(textArr[Math.floor(Math.random()*10)]));
  11. // 这里一定要闭合路径,防止相互影响
  12. pen.beginPath();
  13. pen.fillStyle="#ccc";
  14. pen.fillRect(0,0,500,500);
  15. pen.closePath();
  16. //规定元素相互重叠时如何表现 当前为重叠部分透明
  17. pen.globalCompositeOperation="destination-out";
  18. // 给canvas添加事件,手指移动时获得手指位置,以此位置不断画圆
  19. canvas.addEventListener("touchmove",function(e){
  20. //e.touches为手指列表,[0]为第一个
  21. finger= e.touches[0];
  22. pen.beginPath();
  23. pen.arc(finger.pageX,finger.pageY,15,0,Math.PI*2);
  24. pen.fill();
  25. pen.closePath();
  26. })
  27. //手指放开的时候去计算挂掉的区域占总区域的百分比。大于70%提示ok
  28. //getImageData方法获取像素点。其中前两个参数分别为获取像素区域的左上角X Y坐标。后两个参数为像素区域的高和宽。
  29. //遍历每个像素点,值为0则是刮掉的像素点
  30. canvas.addEventListener("touchend",function(){
  31. dataList= pen.getImageData(0,0,300,400);
  32. for(var i=0;i=dataList.data.length*0.7){
  33. alert("ok!!")
  34. }
  35. },false)

</>复制代码

  1. 这里有个小bug就是可以通过查看元素就能看到最终结果。当然这只是提供一个思路了。所以有什么更好的方法大家可以告诉我。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85679.html

相关文章

发表评论

0条评论

LuDongWei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<