美文网首页
使用Canvas实现刮刮乐效果

使用Canvas实现刮刮乐效果

作者: JannyHo | 来源:发表于2017-07-26 10:36 被阅读0次
image.png image.png
<!-- test.html -->
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Test</title>
    </head>
    <body>
        <h1>adsfasdfasdf</h1>
        <div id="div" style="width:300px;height:90px;margin:200px;padding:0;">
        </div>
        <script src="/utils/scratchcard.js"></script>
        <script>
            var div = document.getElementById('div');
            div.ScratchCard('一等奖');
        </script>
    </body>
</html>
/**
  * scratchcard.js
  */
Element.prototype.ScratchCard = function(t){
    var s = this;
    if(!s.nodeType || s.nodeType !== 1 || !t || Object.prototype.toString.call(t) !== '[object String]') return;
    w = s.clientWidth;
    h = s.clientHeight;
    var bg = document.createElement('div'),
    canvas = document.createElement('canvas'),
    context = canvas.getContext("2d"),
    touched = false,
    page_x = 0,
    page_y = 0,
    begin = function(e){
        touched = true;
        page_x = e.pageX-s.offsetLeft;
        page_y = e.pageY-s.offsetTop;
    },
    move = function(e){
      e.preventDefault();
      if(touched){
            context.globalCompositeOperation="destination-out"
            context.beginPath();
            context.moveTo( page_x,page_y );
            var epx = e.pageX || e.touches[0].pageX,
                epy = e.pageY || e.touches[0].pageY;
            page_x = epx-s.offsetLeft;
            page_y = epy-s.offsetTop;
            context.lineTo( page_x,page_y );
            context.stroke();
            context.lineWidth = Math.floor(h / 4);
        }
    },
    end = function(e){
        touched = false;
    };
    s.style.position = 'relative';
    bg.innerText = t;
    bg.style.fontSize = Math.floor(w / (t.length + 4)) + 'px';
    bg.style.textAlign = 'center';
    bg.style.width = w + 'px';
    bg.style.height = h + 'px';
    bg.style.lineHeight = h + 'px';
    bg.style.background = 'lightblue';
    s.appendChild(bg);
    canvas.width = w;
    canvas.height = h;
    canvas.style.position = 'absolute';
    canvas.style.top = '0';
    s.appendChild(canvas);
    context.lineCap = "round";
    context.fillStyle="#ccc";
    context.fillRect(0,0,w,h);
    //手指放到屏幕上
    canvas.addEventListener('touchstart', begin);
    canvas.addEventListener('mousedown', begin);
    //手指开始移动
    canvas.addEventListener('touchmove', move);
    canvas.addEventListener('mousemove', move);
    //手指离开
    canvas.addEventListener('touchend', end);
    canvas.addEventListener('mouseup', end);
}

相关文章

  • 使用Canvas实现刮刮乐效果

  • canvas 刮刮乐

    今天我们来模拟刮刮乐效果 既然是使用Canvas来完成刮刮乐的效果,那么我们先来创建一个Canvas标签,并给它赋...

  • canvas-实现刮刮乐效果

    实现思路:0.设置canvas的大小和背景图片一样大1.获取canvas标签和上下文2.添加蒙版3.设置合成属性为...

  • iOS开发 刮刮乐效果的实现

    引言 我们平时在使用支付宝的时候, 会看到类似彩票刮刮乐的效果。如何实现的呢?下面就直接上代码了... 刮刮乐效果...

  • canvas— —刮刮乐

    今天,结合上一篇文章的抽奖小游戏,用canvas来写一个小游戏——刮刮乐。首先,用canvas做一个画布,宽高各为...

  • canvas刮刮乐

    在学习canvas 菜鸟一个 写的一个小demo HTML js

  • H5学习

    canvas-demo刮刮乐 效果: 代码: svg根据数据而动态变化的表盘 效果: 代码: audio和vide...

  • 刮刮乐效果

    实现原理: 利用layer的mask遮罩 + 贝塞尔曲线UIBezierPath 关键代码: 效果图:

  • 刮刮乐效果

    html: javascript部分: 调用方法:

  • 刮刮乐效果

    虽然对于canvas不是很了解,但是写这个效果确实是很常用的,看到这个资料的时候相对于来说这个代码还是比较简单的,...

网友评论

      本文标题:使用Canvas实现刮刮乐效果

      本文链接:https://www.haomeiwen.com/subject/tzynkxtx.html