zoukankan      html  css  js  c++  java
  • html5之Canvas绘图工具基础介绍

    PS:

      中文版教程参考:https://developer.mozilla.org/zh-CN/docs/Canvas_tutorial

    一、canvas标签

      Canvas 对象表示一个 HTML 画布元素。它没有自己的行为,但是定义了一个 API 支持脚本化客户端绘图操作。

      <canvas> 标签定义图形,比如图表和其他图像;<canvas> 标签只是图形容器,必须使用脚本来绘制图形。

      大多数 Canvas 绘图 API 都没有定义在 <canvas> 元素本身上,而是定义在通过画布的 getContext() 方法获得的一个“绘图环境”对象上。(下方实例中的ctx即是)

    二、canvas定义

    <canvas id=“myCanvas”  width="150" height="150"></canvas>

    三、canvas脚本绘制

      a、使用canvas 元素来显示一个矩形

    <script type="text/javascript">
        var canvas=document.getElementById('myCanvas');
        var ctx=canvas.getContext('2d');
        ctx.fillStyle='#FF0000';             //   也可使用rgb填充:ctx.fillStyle = "rgb(200,0,0)";
      ctx.fillRect(0,0,80,100); 
    </script>

      b、绘制三角形形状:

    <script type="text/javascript">
        cxt.fillStyle="#FF0000";
        cxt.beginPath();
        cxt.moveTo(10,10);
        cxt.lineTo(150,50); 
        cxt.lineTo(10,50);
        cxt.lineTo(10,10); 
        cxt.stroke();
        cxt.closePath(); 
        cxt.fill();
    </script>

    结果图:

      

     四、使用路径path坐标点集绘制canvas 

    <script>
      var linePaths =[[0,0],[100,130],[150,150],[200,300]];
      var ctx=$('canvas')[0].getContext('2d');
      function drawPath(){
            //画线
            ctx.beginPath();
            ctx.globalAlpha = "0.5";       //透明度
            for (var k = 0; k < linePaths.length; k++) {
                if (k == 0) {
                    ctx.moveTo(linePaths[0][0],linePaths[0][1]);
                } else {
                    ctx.lineTo(linePaths[k][0],linePaths[k][1]);
                }
            }
            ctx.lineWidth =4;                //线宽
            ctx.strokeStyle = "Green";  //颜色
            ctx.stroke();            
      }; 
      drawPath();
    </script>

    结果图:

                

    五、canvas画布清空(实质:重新绘制)   

      canvas这个标签就像一个img图片,可以在上面绘制很多的geometry,比如点、线、面。但所有绘制的元素是一个整体,集成在canvas上。如果想判断某点是不是在canvas绘制的要素上,可以通过重绘来完成,没有办法直接判断。  

      值得注意的是,isPointInPath只能判断当前路径,不能一次性对canvas中所有图形路径进行查询判断,因而需要重绘。  

      重新绘制canvas中个各个geometry,绘制一个判断一次,因为图形的路径绑定在canvas标签上,通过 isPointInPath()对当前路径(currentPath)判断有效。换句话说就是,当点击事件发生后,对canvas中的内容进行重绘,每次重绘一个路径图形,就用 isPointInPath()判断一次,如果在路径内,再执行相应的操作,比如所有相同id的路径高亮显示等。

      比如目的是判断鼠标当前点point(x,y)是不是在canvas绘制的要素上,用代码解释上方的描述:

      

    六、canvas画布的方法(截图、分析)

    七、综述

      a、canvas相对于svg的优势...

      b、canvas对于适量绘制地图方法的可行(会在其他文章中详述使用方法)

    PS: 先列出提纲,内容待续。。。

  • 相关阅读:
    钢镚儿冲刺一周期第七天
    代码大全(第二版)阅读笔记01
    组队开发——地铁路线查询
    学习进度——第五周
    学习进度——第四周
    返回一个整数数组中最大子数组的和(文件)
    学习进度——第三周
    返回一个整数数组中最大子数组的和
    自我介绍
    学习进度——第二周
  • 原文地址:https://www.cnblogs.com/qiongmiaoer/p/2952133.html
Copyright © 2011-2022 走看看