zoukankan      html  css  js  c++  java
  • 咱的刮刮乐

    一步步写成

    1、第一步

    刮刮乐基本做法:用canvas画一条线,想办法让画的这条线透明,显示被遮住的内容。故第一步就是画这条线

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <title>canvas paint</title>
     5 <style>
     6 .wrap{1200px;margin:60px auto;background:#386077;height:500px;}
     7 canvas{background:#eee;}
     8 </style>
     9 </head>
    10 <body>
    11 <div class="wrap">
    12   <canvas width=1200 height=500 id="c"></canvas>
    13 </div>
    14 <script>
    15 var ctx = c.getContext('2d');
    16 ctx.lineWidth = 2;
    17 ctx.strokeStyle="#386077";
    18 ctx.beginPath();
    19 var orignx, origny, startx, starty, offsetx = c.offsetLeft, offsety = c.offsetTop;
    20 function mousedown(e){
    21   orignx = e.clientX;
    22   origny = e.clientY;
    23   startx = orignx - offsetx;
    24   starty = origny - offsety;
    25   ctx.moveTo(startx, starty);
    26   c.addEventListener('mousemove', mousemove, false);
    27   c.addEventListener('mouseup', mouseup, false);
    28 }
    29 function mousemove(e){
    30   var x = e.clientX - offsetx, y = e.clientY - offsety;
    31   ctx.lineTo(x, y);
    32   console.log(x + ", " + y);
    33   ctx.stroke();
    34 }
    35 function mouseup(){
    36   c.removeEventListener('mousemove', mousemove, false);
    37   c.removeEventListener('mouseup', mouseup, false);
    38   ctx.stroke();
    39 }
    40 c.addEventListener('mousedown', mousedown, false);
    41 
    42 
    43 </script>
    44 </body>
    45 </html>
    View Code

    由此便可以作画了

    2、第二步 线变得透明

    canvas有个属性,globalCompositeOperation = destination-out,这样被后面图形覆盖到的就会变得透明

    destination-out 在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。

    ok,看一个圆形:

    就是这样,两者一结合,刮刮乐就出来了

    3、刮刮乐

     1 <!doctype html>
     2 <html>
     3 <head>
     4 <title>canvas paint</title>
     5 <style>
     6 .wrap{1200px;margin:60px auto;background:#386077;height:500px;padding-top:60px;}
     7 .card{position:relative;margin:60px auto;400px;height:150px;}
     8 .default{text-align:center;line-height:150px;color:#ff5400;font-family:Arial;font-size:24px;}
     9 #twrap{100%;height:100%;}
    10 canvas{position:absolute;top:0;left:0;}
    11 </style>
    12 </head>
    13 <body>
    14 <div class="wrap">
    15   <div class="card">
    16     <div id="twrap"></div>
    17     <canvas width=400 height=150 id="canvas"></canvas>
    18   </div>
    19 </div>
    20 <script>
    21 var coverColor = '#bab4a8', w = 20, text = document.createElement('div');
    22 text.className='default';
    23 text.innerHTML='恭喜您,中了一百万大奖!';
    24 var c = canvas.getContext('2d');
    25 c.globalCompositeOperation = 'source-over';
    26 c.fillStyle = coverColor;
    27 c.fillRect(0,0,400,150);
    28 c.font = '40px Arial';
    29 c.fillStyle = '#666';
    30 c.measureText('');
    31 c.fillText('刮刮乐', 135, 90);
    32 c.globalCompositeOperation = 'destination-out';
    33 c.lineJoin = 'round';
    34 c.lineCap = 'round';
    35 c.lineWidth = w || 30;
    36 c.strokeStyle = 'rgba(0,0,0,255)';
    37 c.beginPath();
    38 twrap.appendChild(text);
    39 
    40 var orignx, origny, startx, starty, offsetx = canvas.getBoundingClientRect().left, offsety = canvas.getBoundingClientRect().top;
    41 function mousedown(e){
    42   orignx = e.clientX;
    43   origny = e.clientY;
    44   startx = orignx - offsetx;
    45   starty = origny - offsety;
    46   c.moveTo(startx, starty);
    47   canvas.addEventListener('mousemove', mousemove, false);
    48   canvas.addEventListener('mouseup', mouseup, false);
    49 }
    50 function mousemove(e){
    51   var x = e.clientX - offsetx, y = e.clientY - offsety;
    52   c.lineTo(x, y);
    53   console.log(x + ", " + y);
    54   c.stroke();
    55 }
    56 function mouseup(){
    57   canvas.removeEventListener('mousemove', mousemove, false);
    58   canvas.removeEventListener('mouseup', mouseup, false);
    59   c.stroke();
    60 }
    61 canvas.addEventListener('mousedown', mousedown, false);
    62 
    63 </script>
    64 </body>
    65 </html>
    View Code

    看我的100万大奖

  • 相关阅读:
    如何通过css控制内容显示顺序 第二行的内容优先显示
    《掌上流年》“国内首部微信日记”出版
    Hello Kitty微信主题很可爱?小心财产安全!
    第三方网站不能调用微信公众平台里的图片了 显示"此图片来自微信公众号平台未经允许不可引用"
    鼓浪屿船票也能用微信支付了
    excel判断单元格包含指定内容的函数用=IF(COUNTIF(A1,"*内容*"),"0","1")
    认证的政府与媒体类订阅号可取得网页授权接口了
    来八卦一下常刷微信朋友圈的你属于什么类型
    微信稳居Android App排行榜4月份国内榜首
    [福利]非认证公众帐号也能申请微信连Wi-Fi了
  • 原文地址:https://www.cnblogs.com/ward/p/5002451.html
Copyright © 2011-2022 走看看