canvas学习

1.在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    canvas {
      border: 1px solid #000;
      background-color: #1fff;
    }
  </style>
</head>

<body>
  <div>
    <div>部分浏览器不支持canvas 只需要在canvas标签内书写提示文字即可 <br> canvas只有三个属性 id width默认300 height默认150</div>
    <canvas id="mycanvas" width="300" height="150">浏览器不支持cancas 请升级!</canvas>
  </div>

  <script>
    // 部分浏览器不支持canvas  只需要在canvas标签内书写提示文字即可 canvas只有三个属性 id width默认300 height默认150
    function draw() {
      var canvas = document.getElementById("mycanvas")
      if (canvas.getContext) {
        var ctx = canvas.getContext('2d')
      } else {
        // canvas-unsupported code here
      }
    }

    draw()
  </script>
</body>

</html>

在这里插入图片描述

      var canvas = document.getElementById("mycanvas")
      if (!canvas.getContext) return;
      var ctx = canvas.getContext('2d')

      // 1.先设置颜色 在绘制图形 否则颜色失效
      // 2.超出canvas的部分会被隐藏
      // 3.下方的会覆盖上方的
      ctx.fillStyle = "#FF0000"
      ctx.fillRect(0, 0, 200, 300)

      ctx.fillStyle = "#00FF00"
      ctx.fillRect(100, 0, 200, 100)

3.绘制矩形的三种方法
在这里插入图片描述

      var canvas = document.getElementById("mycanvas")
      if (!canvas.getContext) return;
      var ctx = canvas.getContext('2d')
      // canvas 提供了三种方法绘制矩形:
      // 1.fillRect(x, y, width, height) 绘制一个填充的矩形
      // 2.strokeRect(x, y, width, height) 绘制一个矩形的边框
      // 3.clearRect(x, y, widh, height) 清除指定的矩形区域,然后这块区域会变的完全透明。
      ctx.fillStyle = "#FF0000"
      ctx.fillRect(0, 0, 30, 50)

      ctx.strokeRect(0, 60, 30, 40)

      ctx.clearRect(10, 10, 10, 10)
      // 几种渲染和画图的区别
      cvsCtx.fillRect(10, 10, 100, 50); //直接填充出矩形
      cvsCtx.strokeRect(10, 10, 100, 50); //直接画矩形边框
      cvsCtx.rect(10, 10, 100, 50); //直接画矩形边框
      cvsCtx.clearRect(20, 20, 20, 20) // 清空某块矩形区域
      cvsCtx.fill(); // 只是填充--需要先画图
      cvsCtx.stroke(); // 描边--需要先画图

4.路径划线

注意点:
      1.beginPath() 新建一条路径, 路径一旦创建成功, 图形绘制命令被指向到路径上生成路径--必须

      2.moveTo(x, y) 把画笔移动到指定的坐标(x, y)。 相当于设置路径的起始点坐标。---必须

      3.closePath() 创建从当前点回到起始点的路径  相当于将当前点终点1回到起始点0进行连接闭合  下次再划出的线只会从起点0到终点2 而不是从终点1画到终点2

      4.stroke() 通过线条来绘制图形轮廓----划线描边---不会自动closePath()----必须要有--否则不会有描出的线

      5.fill() 通过填充路径的内容区域生成实心的图形---填充闭合区域。如果closePath路径未关闭,那么 fill() 方法会从路径结束点到最初的开始点moveTo之间添加一条线,以关闭该路径,然后填充该路径。

划线1.
在这里插入图片描述

      var canvas = document.getElementById("mycanvas")
      if (!canvas.getContext) return;
      var cvsCtx = canvas.getContext('2d')

      cvsCtx.beginPath();
      cvsCtx.moveTo(10, 50);
      cvsCtx.lineTo(100, 100);

      cvsCtx.closePath();
      cvsCtx.lineTo(200,100)
      cvsCtx.stroke();

划线2.
在这里插入图片描述

      var canvas = document.getElementById("mycanvas")
      if (!canvas.getContext) return;
      var cvsCtx = canvas.getContext('2d')
      
      cvsCtx.beginPath();
      cvsCtx.moveTo(10, 50);
      cvsCtx.lineTo(100, 100);

      // cvsCtx.closePath();
      cvsCtx.lineTo(200,100)
      cvsCtx.stroke();

划线3
在这里插入图片描述

      var canvas = document.getElementById("mycanvas")
      if (!canvas.getContext) return;
      var cvsCtx = canvas.getContext('2d')
      cvsCtx.beginPath();
      cvsCtx.moveTo(10, 50);
      cvsCtx.lineTo(100, 100);

      cvsCtx.lineTo(200,100)
      cvsCtx.closePath();
      cvsCtx.stroke();

5.画弧线

在这里插入图片描述

方法1:
      cvsCtx.arc(x, y, r, sAngle, eAngle, false);
      x,y原点 r半径 开始和技术的角度Math.PI就是圆周率   2* Math.PI为圆   画图方向默认顺时针false
      var canvas = document.getElementById("mycanvas")
      if (!canvas.getContext) return;
      var cvsCtx = canvas.getContext('2d')

      cvsCtx.beginPath();
      cvsCtx.arc(50, 50, 40, 0, 1.5 * Math.PI, false);
      // cvsCtx.closePath();
      cvsCtx.stroke()
      // cvsCtx.fillStyle = "#00ff00";
      // cvsCtx.fill()

      cvsCtx.beginPath();
      cvsCtx.arc(150, 50, 40, 0, 1.5 * Math.PI, false);
      cvsCtx.closePath();
      cvsCtx.stroke()
      cvsCtx.fillStyle = "#00ff00";
      cvsCtx.fill()

在这里插入图片描述

      cvsCtx.arcTo(x1, y1, x2, y2, radius);
      弧线点1 弧线点2 半径r  就是两点的切线画弧度
      cvsCtx.beginPath();
      cvsCtx.moveTo(20, 20); // 创建开始点
      cvsCtx.lineTo(100, 20); // 创建水平线
      cvsCtx.arcTo(150, 20, 150, 70, 50); // 创建弧
      cvsCtx.lineTo(150, 120); // 创建垂直线
      cvsCtx.stroke(); // 进行绘制

6.二次贝塞尔曲线和三次贝塞尔曲线

在这里插入图片描述

      var canvas = document.getElementById("mycanvas")
      if (!canvas.getContext) return;

      var cvsCtx = canvas.getContext('2d')
      cvsCtx.fillRect(40, 40, 2, 2)
      cvsCtx.fillRect(240, 40, 2, 2)
      cvsCtx.fillRect(80, 140, 2, 2)

      // cvsCtx.quadraticCurveTo(cpx, cpy, x, y);  cpx, cpy是控制点  x, y是结束点
      cvsCtx.beginPath();
      cvsCtx.moveTo(40, 40); //起始点
      cvsCtx.quadraticCurveTo(80, 140, 240, 40);
      cvsCtx.strokeStyle = "#0000ff";
      cvsCtx.stroke();

在这里插入图片描述

      var canvas = document.getElementById("mycanvas")
      if (!canvas.getContext) return;

      var cvsCtx = canvas.getContext('2d')
      cvsCtx.beginPath();
      cvsCtx.moveTo(40, 200); //起始点
      var cp1x = 20,
        cp1y = 100; //控制点1
      var cp2x = 100,
        cp2y = 120; //控制点2
      var x = 200,
        y = 200; // 结束点
      //绘制二次贝塞尔曲线
      cvsCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
      cvsCtx.stroke();

      cvsCtx.beginPath();
      cvsCtx.rect(40, 200, 10, 10);
      cvsCtx.rect(cp1x, cp1y, 10, 10);
      cvsCtx.rect(cp2x, cp2y, 10, 10);
      cvsCtx.rect(x, y, 10, 10);
      cvsCtx.fill();

7.样式和颜色

在这里插入图片描述

      var canvas = document.getElementById("mycanvas")
      if (!canvas.getContext) return;
      var cvsCtx = canvas.getContext('2d')

      // cvsCtx.fillStyle = "#00cc00"; //填充色
      // cvsCtx.strokeStyle = "##00dd00";//描边色

      for (let x = 0; x < 12; x++) {
        for (let y = 0; y < 12; y++) {
          console.log(x, y);
          cvsCtx.fillStyle = 'rgba(' + Math.floor(255 - x * 21.25) + ',' + Math.floor(255 - y * 21.25) + ',' + 255 +
            ',' +
            '1)';
          cvsCtx.fillRect(x * 25, y * 25, 25, 25);
        }
      }

在这里插入图片描述

  <script type="text/javascript">
    function draw() {
      var canvas = document.getElementById('mycanvas');
      if (!canvas.getContext) return;
      var ctx = canvas.getContext("2d");
      for (var i = 0; i < 6; i++) {
        for (var j = 0; j < 6; j++) {
          ctx.strokeStyle = `rgb(${randomInt(0, 255)},${randomInt(0, 255)},${randomInt(0, 255)})`;
          ctx.strokeRect(j * 50, i * 50, 40, 40);
        }
      }
    }
    draw();
    /**
     作者:李振超      4 Jun 2017 12:12
     返回随机的 [from, to] 之间的整数(包括from,也包括to)
     */
    function randomInt(from, to) {
      return parseInt(Math.random() * (to - from + 1) + from);
    }
  </script>

8.透明度

在这里插入图片描述

       var canvas = document.getElementById('mycanvas');
      if (!canvas.getContext) return;
      var cvsCxt = canvas.getContext("2d");

      cvsCxt.fillStyle = "rgba(1,255,255)";
      cvsCxt.fillRect(20, 20, 75, 50);

      // 调节透明度--设置后会影响到下方的透明度--所以可以一个一设或者设置一个后 在重置掉
      // 最好的办法是使用rgba()设置透明度
      cvsCxt.globalAlpha = 0.2;
      cvsCxt.fillStyle = "#00ff00";
      cvsCxt.fillRect(50, 50, 75, 50);
      cvsCxt.globalAlpha = 0.8;
      cvsCxt.fillStyle = "red";
      cvsCxt.fillRect(80, 80, 75, 50);

9.线段样式

1.线段宽度
在这里插入图片描述

      var canvas = document.getElementById('mycanvas');
      if (!canvas.getContext) return;
      var cvsCtx = canvas.getContext("2d");

      cvsCtx.beginPath();
      cvsCtx.moveTo(10, 10);
      cvsCtx.lineTo(100, 10);
      cvsCtx.strokeStyle = "#ff0000";
      cvsCtx.stroke();

      cvsCtx.beginPath();
      cvsCtx.moveTo(20, 20);
      cvsCtx.lineTo(200, 20);
      cvsCtx.lineWidth = 5; // lineWidth = num 默认是1  会影响后面的线条宽度
      cvsCtx.strokeStyle = "#00ff00";
      cvsCtx.stroke();

在这里插入图片描述

      var canvas = document.getElementById('mycanvas');
      if (!canvas.getContext) return;
      var cvsCtx = canvas.getContext("2d");

      var lineCaps = ["butt", "round", "square"]; 
      // cvsCtx.lineCap = "" 线段末端以方形、圆形、多一块方形结束

      for (var i = 0; i < 3; i++) {
        cvsCtx.beginPath();
        cvsCtx.moveTo(20 + 30 * i, 30);
        cvsCtx.lineTo(20 + 30 * i, 100);
        cvsCtx.lineWidth = 20;
        cvsCtx.lineCap = lineCaps[i];
        cvsCtx.stroke();
      }

      cvsCtx.beginPath();
      cvsCtx.moveTo(0, 30);
      cvsCtx.lineTo(300, 30);

      cvsCtx.moveTo(0, 100);
      cvsCtx.lineTo(300, 100)

      cvsCtx.strokeStyle = "red";
      cvsCtx.lineWidth = 1;
      cvsCtx.stroke();

在这里插入图片描述

      var canvas = document.getElementById('mycanvas');
      if (!canvas.getContext) return;
      var cvsCtx = canvas.getContext("2d");

      var lineJoin = ['round', 'bevel', 'miter']; //cvsCtx.lineJoin = 线段连接处以圆形、矩形、菱角相连接
      cvsCtx.lineWidth = 20;

      for (var i = 0; i < lineJoin.length; i++) {
        cvsCtx.lineJoin = lineJoin[i];
        cvsCtx.beginPath();
        cvsCtx.moveTo(50, 50 + i * 50);
        cvsCtx.lineTo(100, 100 + i * 50);
        cvsCtx.lineTo(150, 50 + i * 50);
        cvsCtx.lineTo(200, 100 + i * 50);
        cvsCtx.lineTo(250, 50 + i * 50);
        cvsCtx.stroke();
      }

在这里插入图片描述

      var canvas = document.getElementById('mycanvas');
      if (!canvas.getContext) return;
      var cvsCtx = canvas.getContext("2d");

      cvsCtx.setLineDash([20, 2]); // [实线长度, 每个间隙长度]
      cvsCtx.lineDashOffset = -10; //属性设置起始偏移量
      cvsCtx.strokeRect(20, 20, 200, 100);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值