老莫的笔记本  
  
查看: 1171|回复: 1

Canvas基础图形绘制

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2018-12-12 23:38:12 | 显示全部楼层 |阅读模式
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6. <title>canvas画图</title>
  7. <meta name="description" content="">
  8. <meta name="keywords" content="">
  9. <link href="" rel="stylesheet">
  10. <style>
  11.     .canvasBox{
  12.         border:1px solid #000;
  13.     }
  14. </style>   
  15. </head>
  16. <body>
  17.    
  18.     <canvas class="canvasBox" id="canvas" width="600" height="400"></canvas>
  19.     <br />
  20.     测试项目
  21.     <script>
  22.     var myCanvas = document.getElementById('canvas');
  23.     var ctx = myCanvas.getContext("2d");
  24.     // 填充一个矩形
  25.     ctx.fillStyle="rgba(200,0,0)";
  26.     ctx.fillRect(50, 50, 80, 10);
  27.     // 绘制一个矩形
  28.     ctx.strokeRect(100, 100, 30, 10);
  29.     // 清除一个矩形 == 实际使用中,通常都是清空整个canvas  绘画下一侦的内容
  30.     // ctx.clearRect(0, 0, 600, 400)
  31.     // 1、建立启点   【使用路径绘图第一步】
  32.     //      ctx.beginPath();
  33.     // 2、使用画图命令画出路径
  34.     //      ctx.stroke();
  35.     // 3、之后把路径闭合
  36.     //      ctx.closePath();
  37.     // 4、一旦路径生成就可以使用描边或者填充路径区域来渲染图形
  38.     //        fill();
  39.     ctx.beginPath();
  40.     ctx.moveTo(400,100);
  41.     ctx.lineTo(300,200);
  42.     ctx.lineTo(340,260);
  43.     ctx.closePath();    //若我先闭合 则给我描出个三角形,若先描再闭合 就少一条
  44.     ctx.stroke();   //描边 没有这个 就全是透明滴 空的
  45.    
  46.     ctx.beginPath();
  47.     ctx.moveTo(200,100);
  48.     ctx.lineTo(330,250);
  49.     ctx.lineTo(340,290);
  50.     ctx.fillStyle="rgba(30,30,30)";  //若我在这没有设置 则 这个填充颜色就是离最近fillstyle
  51.     ctx.fill()
  52.     // 笑脸圆形与弧形的绘制
  53.     ctx.beginPath();
  54.     ctx.arc(75,75,50,0,Math.PI*2,true);   
  55.     ctx.moveTo(110,75);
  56.     ctx.arc(75,75,35,0,Math.PI,false);
  57.     ctx.moveTo(65,65);
  58.     ctx.arc(60,65,5,0,Math.PI*2,true);  // 左眼
  59.     ctx.moveTo(95,65);
  60.     ctx.arc(90,65,5,0,Math.PI*2,true);  // 右眼
  61.     ctx.stroke();
  62.     // 画个弧度线试试
  63.     ctx.beginPath();
  64.     ctx.moveTo(300,200)
  65.     ctx.arcTo(200,200,50,50,70); //参数解析 前两个是第一个圆的坐标,中间是第二个圆形的坐标,最后是直径
  66.     ctx.stroke();
  67.     // 贝塞尔曲线,了解为主
  68.      // 二次贝塞尔曲线
  69.      ctx.beginPath();
  70.      ctx.moveTo(75,25);
  71.      ctx.quadraticCurveTo(25,25,25,62.5);
  72.      ctx.quadraticCurveTo(25,100,50,100);
  73.      ctx.quadraticCurveTo(50,120,30,125);
  74.      ctx.quadraticCurveTo(60,120,65,100);
  75.      ctx.quadraticCurveTo(125,100,125,62.5);
  76.      ctx.quadraticCurveTo(125,25,75,25);
  77.      ctx.stroke();
  78.      // 绘制矩形的额外方法
  79.      ctx.rect(330, 330, 200, 100)
  80.      ctx.stroke()
  81.      
  82.     </script>
  83. </body>
  84. </html>
复制代码


基础知识记录:

// 不同于SVG,HTML中的元素canvas只支持一种原生的图形绘制:矩形。
//
//
// 每次设定beginPath();后 都要专门设定起始位置  ctx.moveTo(x,y);
// 注意了  可以使用moveTo()绘制一些不连续的路径, 就是说 即使我不使用beginPath(),我依旧可以重新做一个起点画一个不连续的图
//
//
// 绘制直线使用    lineto(x,y);
// 绘制圆形:  arc(x,y,radius,startAngle,endAngle,anticlockwise) ; 注意 这是开始的弧度 而不是 角度
//     弧度=(Math.PI/180)*角度。   anticlockwise 给定的方向,默认是顺时针  值为 true,false
//
//
//
// 当调用fill() 时 所有没有闭合的形状都会自动闭合,不需要调用closePath();
//
//
// Path2D对象:用来缓存或者记录绘画命令;

回复

使用道具 举报

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
 楼主| 发表于 2018-12-12 23:48:37 | 显示全部楼层
    // 1、建立启点   【使用路径绘图第一步】
    //      ctx.beginPath();
    // 2、使用画图命令画出路径
    //      ctx.stroke();
    // 3、之后把路径闭合
    //      ctx.closePath();
    // 4、一旦路径生成就可以使用描边或者填充路径区域来渲染图形
    //        fill();
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表