刮奖效果

一、HTML

<img src="bg.png">
<h1>刮一刮</h1>
<div id="guajiang">
  <canvas width="240" height="65" id="mask"></canvas>
</div>
<p id="status">请在以上的刮奖区刮奖</p>

二、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;
}

 

三、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();       

//在所触摸处绘制手指圆形,半径为20像素

     context.arc(touch.pageX-canvas.offsetLeft,touch.pageY-canvas.offsetTop,20,0,Math.PI*2);

//结束路径绘制
      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];

//当透明度小于10时,认为它已经被擦除
          if (alpha < 10) {

//使transparent加1
               transparent++;

           }
       }
//计算透明像素在所有像素点中所占的比例

      var percentage = transparent / (loop / 4);
//当该比例大于50%时
      if(percentage>.5){

//显示刮奖结束字样
          document.getElementById("status").innerHTML = "刮奖结束!";

//清除遮掩层
          context.clearRect(0, 0, 240, 65);

      }
});

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值