美文网首页
Canvas 学习笔记

Canvas 学习笔记

作者: _月光临海 | 来源:发表于2017-09-24 14:32 被阅读0次

基本信息

  • <canvas> 默认为 inline ,默认大小为 width:300px;height:150px;,默认 黑色
  • <canvas> 默认原点为左上角,向右为 X轴 正方向,向下为 Y轴 正方向
  • 参照 W3C 标准,<canvas> 的大小应该写在标签中,并且不写单位,如下:
    <canvas id="canvas" width="1024" height="768"></canvas>
  • 也可以在 JavaScript 中使用 canvas.widthcanvas.height 设置画布宽高(同样不用写单位)
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Document</title>
      </head>
      <body>
          <canvas id="canvas" width="1024" height="768" style="border:5px solid red;display: block;margin:50px auto;"></canvas>
          <script>
              // 获取到 canvas 元素
              var canvas = document.getElementById('canvas');
              // JS 中设置宽高
              canvas.width = 1024;
              canvas.height = 768;
              // 兼容
              if(canvas.getConext('2d')){
                  var context = canvas.getContext('2d')
                  // 使用 context 绘制
              }
              else{
                  alert('当前浏览器不支持 Canvas , 请更换浏览器后再试')
              }
          </script>
      </body>
      </html>
    

画一条直线

  • 起点(状态) context.moveTo()
  • 终点(状态) context.lineTo()
  • 线条宽度 context.lineWidth = 5
  • 线条颜色 context.strokeStyle = '#00588'
  • 画线条(绘制) context.stroke()
  • canvas 是基于状态的绘图,即:整个绘图过程应该是先设置绘图的状态,之后调用具体的函数来进行具体绘制
      // 画个三角形
      context.moveTo(100,100);
      context.lineTo(700,700);
      context.lineTo(100,700);
      context.lineTo(100,100);
      context.lineWidth = 5;
      context.strokeStyle = "#005588";
    
      context.stroke();
    
    canvas 三角形

实心图形

  • 填充颜色:.fillStyle = xxx
  • 填充:.fill()
    ...
    context.fillStyle = 'rgb(2,100,30)'
    context.fill();
实心图形

    context.lineWidth = 5;
    context.strokeStyle = "#005588";
    context.stroke();

    context.fillStyle = 'rgb(2,100,30)'
    context.fill();
  • 以上两种方式可以共用,实现一个 带边框且被填充的三角形

  • 如果想画两条线,为保证两条线互不干扰,需要重新调用 beginPath()

  • beginPath()closePath() 不一定非要成对出现,由于 closePath() 会将绘制图形的首尾自动闭合,所以视情况决定是否调用 closePath()

  • closePath() 对于 .fill() 无效,即:当填充时,无论是否有 closePath() ,都会按照闭合状态进行填充

      context.beginPath();        // 第一条开始
      context.moveTo(100,100);
      context.lineTo(700,700);
      context.lineTo(100,700);
      context.lineTo(100,100);
      context.closePath();        // 第一条结束
    
      context.fillStyle = 'rgb(2,100,30)'
      context.fill();
    
      context.lineWidth = 5;
      context.strokeStyle = 'red';
      context.stroke();
    
      context.beginPath();          // 第二条开始
      context.moveTo(200,100);
      context.lineTo(500,100);
      context.closePath();          // 第二条结束
      context.strokeStyle = 'black';
      context.stroke();
    
    画两个图形

画个七巧板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>canvas七巧板</title>
</head>
<body>
    <canvas id="canvas" style="border:5px solid #aaa;margin:50px auto;display: block;"></canvas>
    <script>
        // 存一个数据表
        var tangram = [
        {p:[{x:0,y:0},{x:800,y:0},{x:400,y:400}],color:'#caff67'},
        {p:[{x:0,y:0},{x:400,y:400},{x:0,y:800}],color:'#67becf'},
        {p:[{x:800,y:0},{x:800,y:400},{x:600,y:600},{x:600,y:200}],color:'#ef3d61'},
        {p:[{x:600,y:200},{x:600,y:600},{x:400,y:400}],color:'#f9f51a'},
        {p:[{x:400,y:400},{x:600,y:600},{x:400,y:800},{x:200,y:600}],color:'#a594c0'},
        {p:[{x:200,y:600},{x:400,y:800},{x:0,y:800}],color:'#fa8ecc'},
        {p:[{x:800,y:400},{x:800,y:800},{x:400,y:800}],color:'#f6ca29'},
        ]
        // 获取到 canvas 元素
        var canvas = document.getElementById('canvas');
        // 设置画布宽高
        canvas.width = 800;
        canvas.height = 800;
        // 准备画
        var context = canvas.getContext('2d');
        // 画每个 七巧板
        for(var i = 0;i<tangram.length;i++){
            draw(tangram[i],context)
        }
        // 画画函数
        function draw(piece,cxt){
            // 每个七巧板都需要有 "落笔" "起笔" 标识
            // "落笔" 标识
            cxt.beginPath();
            cxt.moveTo(piece.p[0].x,piece.p[0].y);
            for(var i = 1;i<piece.p.length;i++){
                cxt.lineTo(piece.p[i].x,piece.p[i].y);
            }
            // "起笔" 标识
            cxt.closePath();
            // 填充颜色
            cxt.fillStyle = piece.color;
            // 填充
            cxt.fill();
            // 边框颜色
            cxt.strokeStyle = '#000';
            // 边框宽度
            cxt.lineWidth = 3;
            // 画边框
            cxt.stroke();
        }
    </script>
</body>
</html>
Canvas 七巧板

画弧线

  • context.arc( 圆心x轴 , 圆心y轴 , 半径 , 开始弧度 , 结束弧度 [,顺/逆时针] ),默认顺时针 false;
  • 无论画的方向如何,起点和终点位置都是不变的


    都从右极点开始画
    context.lineWidth = 5;
    context.strokeStyle = 'red';
    // 起点  终点  半径  开始弧度  结束弧度
    context.arc(300,300,200,1*Math.PI,1.5*Math.PI);
    context.stroke();
9点位置画到12点位置
    context.lineWidth = 5;
    context.strokeStyle = 'red';
    // 起点  终点  半径  开始弧度  结束弧度
    context.arc(300,300,200,1.5*Math.PI,1*Math.PI);
    context.stroke();
12点位置画到9点位置

相关文章

  • canvas入门

    日期:2020 年 5 月 8 日 canvas 学习笔记 canvas 简介 canvas 是一个用来绘图的 h...

  • Canvas学习笔记之色彩

    canvas 学习笔记 -- by Damon colors line styles gradient patte...

  • Canvas学习笔记之图像处理

    Canvas 学习笔记 -- by Damon canvas对于图像的操作能力 功能:动态的图像合成、图形的背景、...

  • Canvas学习笔记之像素

    Canvas 学习笔记之像素操作 -- by Damon 像素操作 ImageData 对象width: Numb...

  • 使用Canvas绘制几何图形

    前言 这是我学习自定义View系列中的使用Canvas自带方法(drawxx)绘制几何图形笔记. Canvas T...

  • canvas学习笔记

    1. canvas 基础 api 2. 练习画七巧板 3. canvas 画圆 圆的开始角与结束角 相关练习 注意...

  • canvas学习笔记

    最基本的使用创建一个画布所有的操作都在画布的context上面canvas是基于状态而不是基于对象的,比如说颜色都...

  • canvas学习笔记

    一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...

  • canvas学习笔记

    canvas制造2d环境: var txt = cvs.grtContext(‘2d’); 绘制矩形: fillR...

  • Canvas 学习笔记

    基本信息 默认为 inline ,默认大小为 width:300px;height:150px;,默认 黑色 默认...

网友评论

      本文标题:Canvas 学习笔记

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