zoukankan      html  css  js  c++  java
  • 用Canvas画一个刮刮乐

    Canvas 通过 JavaScript 来绘制 2D图形。Canvas 是逐像素进行渲染的。开发者可以通过javascript脚本实现任意绘图。Canvas元素是HTML5的一部分,允许脚本语言动态渲染位图像。canvas是HTML5中的新元素,使用javascript用它来绘制图形、图标、以及其它任何视觉性图像。

    在国外问答网站Quora上,许多开发者对于HTML5 Canvas元素的实用性进行了一系列探讨。Canvas非常灵活,能够很好地融合JavaScript代码并在浏览器内绘制华丽的图形。

    学习网址和资料:
    菜鸟教程:http://www.runoob.com/html/html5-canvas.html
    http://www.w3school.com.cn/tags/tag_canvas.asp

    图片.png

    用Canvas画一个刮刮乐步骤:

    一:创建一个画布(Canvas)

    注意: 标签通常需要指定一个id属性 (脚本中经常引用), width 和 height 属性定义的画布的大小.

    <canvas>简单实例如下:
    <canvas id="myCanvas" width="200" height="100"></canvas> 
    
    二:使用 JavaScript 来绘制图像

    canvas 元素本身是没有绘图能力的。所有的绘制工作必须在 JavaScript 内部完成:

    var isdown = false,
    cover = document.getElementById("cover"),//首先,找到 <canvas> 元素:
    covercanvas = cover.getContext("2d");//然后,创建 context 对象:
    
    三:绘制矩形

    //设置fillStyle属性可以是CSS颜色,渐变,或图案。fillStyle 默认设置是#000000(黑色)。
    //canvas 是一个二维网格。canvas 的左上角坐标为 (0,0),上面的 fillRect 方法拥有参数 (0,0,400,200)。意思是:在画布上绘制 400x200 的矩形,从左上角开始 (0,0)。

    covercanvas.fillStyle="transparent";
    covercanvas.fillRect(0,0,400,200);
    
    四:移动端阻止浏览器默认功能

    由于是长按事件,要在移动端阻止浏览器默认功能。

    function isDown(e){
    e.preventDefault();
    isdown=true; 
    }
    function isUp(e){
    isdown=false; 
    }
    ..........
    
    五:鼠标事件

    需要改变的内容为_width,_height,touchTop,touchLeft这几个参数,根据自身画布的位置自行计算即可。

    function draw(e) {
               e.preventDefault();
               if(isdown) {
                   if(e.changedTouches) {
                       e = e.changedTouches[e.changedTouches.length - 1];
                   }
                   var _height = parseInt((window.innerHeight - 400) / 2),
                       _width = parseInt((window.innerWidth - 400) / 2),
                       touchTop = e.clientY - _height,
                       touchLeft = e.clientX - _width;
                   with(covercanvas) {
                       beginPath();
                       arc(touchLeft, touchTop, 10, 0, Math.PI * 2);
                       fill();
                   }
               }
               //alert(touchTop);
           }
    
    实际例子(完整代码)
    <!doctype html>
    <html>
    
       <head>
           <meta charset="utf-8">
           <title>用Canvas画一个刮刮乐</title>
           <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" />
           <style>
               .content,
               .cover {
                   width: 400px;
                   height: 400px;
                   position: absolute;
                   left: 50%;
                   top: 50%;
                   margin: -200px 0 0 -200px;
               }
               
               .content {
                   font-size: 48px;
                   line-height: 200px;
                   text-align: center;
                   color: red;
               }
               
               h3 {
                   text-align: center;
                   line-height: 200px;
                   color: deepskyblue;
               }
           </style>
       </head>
    
       <body>
           <h3>刮刮乐</h3>
           <div class="content">蚂蚁会员vip</div>
           <!-- 创建一个画布(Canvas)-->
    
           <canvas id="cover" class="cover" width="400" height="400"></canvas>
    
       </body>
       <script>
           /*使用 JavaScript 来绘制图像*/
           var isdown = false,
               cover = document.getElementById("cover"), //首先,找到 <canvas> 元素:
               covercanvas = cover.getContext("2d"); //然后,创建 context 对象:
    
           //下面的两行代码绘制一个灰色的矩形:
           //设置fillStyle属性可以是CSS颜色,渐变,或图案。fillStyle 默认设置是#000000(黑色)。
           covercanvas.fillStyle = "transparent";
           covercanvas.fillRect(0, 0, 400, 200);
    
           //canvas 是一个二维网格。
           //canvas 的左上角坐标为 (0,0)
    
           //上面的 fillRect 方法拥有参数 (0,0,400,200)。
           //意思是:在画布上绘制 400x200 的矩形,从左上角开始 (0,0)。
           function fillter(canvas) {
               canvas.fillStyle = "#ccc";
               canvas.fillRect(0, 0, 400, 200);
           }
    
           function isDown(e) {
               e.preventDefault();
               isdown = true;
           }
    
           function isUp(e) {
               isdown = false;
           }
    
           function draw(e) {
               e.preventDefault();
               if(isdown) {
                   if(e.changedTouches) {
                       e = e.changedTouches[e.changedTouches.length - 1];
                   }
                   var _height = parseInt((window.innerHeight - 400) / 2),
                       _width = parseInt((window.innerWidth - 400) / 2),
                       touchTop = e.clientY - _height,
                       touchLeft = e.clientX - _width;
                   with(covercanvas) {
                       beginPath();
                       arc(touchLeft, touchTop, 10, 0, Math.PI * 2);
                       fill();
                   }
               }
           
           }
    
           fillter(covercanvas);
           covercanvas.globalCompositeOperation = 'destination-out';
           cover.addEventListener('touchstart', isDown);
           cover.addEventListener('touchmove', draw);
           cover.addEventListener('touchend', isUp);
           cover.addEventListener('mousemove', draw);
           cover.addEventListener('mousedown', isDown);
           cover.addEventListener('mouseup', isUp);
       </script>
    
    </html>
    

    Canvas由一个可绘制地区HTML代码中的属性定义决定高度和宽度。JavaScript代码可以访问该地区,通过一套完整的绘图功能类似于其他通用二维的API,从而生成动态的图形。

    原文作者:祈澈姑娘
    原文链接:https://www.jianshu.com/u/05f416aefbe1
    创作不易,转载请告知

    90后前端妹子,爱编程,爱运营,爱折腾。
    坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见,欢迎大家一起探讨交流。
    有个很难涨粉的的公众号叫:【编程微刊】

  • 相关阅读:
    extjs tabpanel动态添加panel
    日期处理工具类
    POI导入导出Excel
    生成流水号
    计划排产系统
    3Dflash 图表xml数据封装
    使用GZIP动态压缩Extjs
    码农行业的薪水一览,如有雷同纯属巧合
    我的技术从今天开始开通啦~~~
    关于腾讯QQ
  • 原文地址:https://www.cnblogs.com/ting6/p/9725741.html
Copyright © 2011-2022 走看看