天天看点

Canvas 实现刮刮乐 js实现刮刮乐

Canvas 实现刮刮乐 js实现刮刮乐

**思路:

(1)首先需要一个盒子定位,确定刮刮乐区域想要放在哪里

(2)定位盒子里有个放内容的盒子,也就是放奖品的

(3)用一个画布(canvas)把上面的盒子盖住

(4)当手触摸移动的时候,可以擦除部分画布,露出奖品区

(5)当擦除足够多(1/3)的时候,可以选择让画布自动消失**

因为没有太多的内容,就直接上代码,有注解,要改的东西就两张图片,改一下路径就行了 还有导入的jquery.js的脚本包

<!DOCTYPE html style="width: 100%; height: 100%" >
<html lang="en" style="width: 100%; height: 100%">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <title>刮开有奖</title>
    <meta name="apple-mobile-web-app-capable" content="yes"/>
    <meta name="format-detection" content="telephone=no">
    <meta http-equiv="x-rim-auto-match" content="none">
    <script src="js/jquery.js"></script>
    <style type="text/css">


        * {
            margin: ;
            padding: ;
         /*   color:#666 ;*/
        }

        .box {
            width: %;
            height: %;
            background: url("img/Britain.jpg") no-repeat;//这是奖品的图片
            background-size: % %;
            position: absolute;
            z-index: ;
            /*margin: 0 auto;*/
        }

        #myCanvas {
            position: absolute;
            left: ;
            top: ;
            z-index: ;
        }

        /* 设置翻页的背景色*/
        .flipbook .page{
            background-color: #e6d3ae;
        }
    </style>
</head>
<body style="width: 100%; height: 100%;">

<!--刮层-->
<div id="canve_box" class="box" style="/* display: none*/">
    <div id="go" style="    width: 40%; height: 6%;position: absolute;z-index: 900; background-color:red;top: 80%;left: 30%;background: url('img/goSee_03.png') ;background-size: 100% 100%;background-repeat: no-repeat; " ></div>
    <canvas id="myCanvas" width="100" height="200" style="/*display: none*/"></canvas>
</div>
</body>
<!--刮刮层-->
<script type="text/javascript">
    //刮图层
    //设置画布的大小
    $("#myCanvas").attr({width: $("body").width(), height: $("body").height()});
    var myCanvas = document.getElementById("myCanvas");
    var can = myCanvas.getContext("2d");
    //获取当前画布的宽高
    var X = myCanvas.width;
    var Y = myCanvas.height;
    var oImg = new Image();
    //进行画布的图片
    oImg.src = "img/index.jpg";
    oImg.onload = function () {
        can.beginPath();
        can.drawImage(oImg, , , X, Y);
        can.closePath();
    }
    var device = /android|iphone|ipad|ipod|webos|iemobile|opear mini|linux/i.test(navigator.userAgent.toLowerCase());
    var startEvtName = device ? "touchstart" : "mousedown";
    var moveEvtName = device ? "touchmove" : "mousemove";
    var endEvtName = device ? "touchend" : "mouseup";

  /* 根据手指移动画线,使之变透明*/
    function draw(event) {
        var x = device ? event.touches[].clientX : event.clientX;
        var y = device ? event.touches[].clientY : event.clientY;
        //console.log(x,y);
        can.beginPath();
        can.globalCompositeOperation = "destination-out";
        can.arc(x, y, , , Math.PI * , false);
        can.fill();
        can.closePath();
    }
    /* 增加触摸监听*/
    //true  捕获 false  冒泡
    myCanvas.addEventListener(startEvtName, function () {
        myCanvas.addEventListener(moveEvtName, draw, false);
    }, false);

    myCanvas.addEventListener(endEvtName, function () {
        myCanvas.removeEventListener(moveEvtName, draw, false);
    }, false);

    //扣除到一定程度,自己打开
/**
第五步要用到canvas像素点的获取
getImageData(int x,int y,int width,int height):该方法获取canvas上从(x,y)点开始,宽为width、高为height的图片区域的数据,该方法返回的是一个CanvasPixelArray对象,该对象具有width、height、data等属性。data属性为一个数组,该数组每4个元素对应一个像素点。
**/
    document.addEventListener(endEvtName, function () {
        /* 获取imageData对象*/
        var imageDate = can.getImageData(, , myCanvas.width, myCanvas.height);
        /* */
        var allPX = imageDate.width * imageDate.height;

        var iNum = ;//记录刮开的像素点个数

        for (var i = ; i < allPX; i++) {
            if (imageDate.data[i *  + ] == ) {
                iNum++;
            }
        }
        if (iNum >= allPX *  / ) {
            // disappear里面写了缓慢清除的css3动画效果
            // myCanvas.setAttribute('class','disappear');
            $("#myCanvas").hide();
        }
    }, false)

</script>

</html>