canvas 学习笔记一

参考资料

创建canvas对象

    //创建canvas标签(节点或对象)
    var cans=document.createElement("canvas");
    //设置宽高
    //canvas只接收px单位值,要想canvas自适应宽高可以把canvas挂载到某一自适应节点(父节点宽高自适应)上canvas继承该节点宽高。或者直接把计算过的宽高赋值给canvas
    cans.width=500;
    cans.height=500;
    //挂载到body上
    document.querySelector(body).appendChild(cans);
    //创建一个CanvasRenderingContext2D对象作为2D渲染的上下文(这一步非常重要,后面的操作都是通过ctx来完成的)
    var ctx = cans.getContext("2d");

CanvasRenderingContext2D接口

CanvasRenderingContext2D 接口用于绘制矩形,文本,图像和其他对象到画布元件。它为canvas元素的绘图表面提供2D渲染上下文。为了得到这个接口的一个对象,调用getContext() canvas element,提供“2d”作为参数

canvas 坐标系

canvas 默认情况下 坐标原点位置为最左上角0.0开始 x轴向右增大,y轴向下增大

    //实例1
    ctx.save();
    ctx.beginPath();
    ctx.strokeStyle="blue";
    ctx.rect(20,20,150,100);
    ctx.stroke();
    ctx .restore();

改变canvas坐标圆点:CanvasRenderingContext2D提供了translate()方法,它接收两个参数x轴坐标 y轴坐标分别用来指定重新映射的圆点位置

   //实例2
   ctx.save();
   ctx.beginPath();
   ctx.translate(250,250);
   ctx.strokeStyle="red";
   ctx.rect(0,0,150,100);
   ctx.stroke();
   ctx .restore();

canvas绘制

CanvasRenderingContext2D提供了多个绘制路劲的方法(我们主要就是用这些方法来绘制各种各样的图形)这边先摘取各别做一些介绍

  • beginPath() 起始一条路径,或重置当前路径

beginPath: 核心的作用是将 不同绘制的形状进行隔离,每次执行此方法,表示重新绘制一个路径,跟之前的绘制的墨迹可以进行分开样式设置和管理。

  • closePath() 创建从当前点回到起始点的路径
  • moveTo()把路径移动到画布中的指定点,不创建线条
  • lineTo() 添加一个新点,然后在画布中创建从该点到最后指定点的线条
  • stroke() 绘制已定义的路径
  • 实例3: 通过提供的API 绘制两个黑色边框的矩形
  • 实例4: 绘制两个绿色边框的矩形 当不使用beginPath() 会发现两个矩形颜色略有不同 那是因为两个绿色边框绘制的墨迹重叠在一起了,导致一深一浅(把实例4的颜色换成一黄一绿就比较明显的看出来)
    因此在每绘制一个图形都建议套用套用如下代码
   ctx.save();
   ctx.beginPath();

   ````绘制图形逻辑

   ctx.restore();

效果展示,请看实例3,实例4 https://codepen.io/x447618716/pen/aGGQNR?editors=0010

  //实例3
  ctx.save();
  ctx.beginPath();
  ctx.strokeStyle="black";
  ctx.moveTo(20,200);
  ctx.lineTo(170,200)
  ctx.lineTo(170,300)
  ctx.lineTo(20,300)
  ctx.closePath();
  ctx.stroke();
  ctx.restore();

  ctx.save();
  ctx.beginPath();
  ctx.strokeStyle="black";
  ctx.moveTo(20,350);
  ctx.lineTo(170,350);
  ctx.lineTo(170,450)
  ctx.lineTo(20,450)
  ctx.closePath();
  ctx.stroke();
  ctx.restore();

  //实例4
  ctx.save();
  ctx.strokeStyle="green";
  //ctx.strokeStyle="yellow";
  ctx.rect(250,20,150,100);
  ctx.stroke();
  ctx.restore();

  ctx.save();
  ctx.strokeStyle="yellow";
  //ctx.strokeStyle="green";
  ctx.rect(250,140,150,100);
  ctx.stroke();
  ctx.restore();
  • 绘制了这么多图形不知发现没有我们设置的颜色与绘制出来的颜色好像变淡了
    嘿嘿,解决方法也很简单那就是在已绘制的路径上在绘制一遍具体做法查看canvas2

canvas作用域

  • CanvasRenderingContext2D提供了两个方法
  • save() 保存当前环境
  • restore() 返回之前保存过的路径状态和属性

顾名思义所谓作用域就好比一个密封箱子,不管箱子里面有什么难闻的气味或什么只有在箱子里面才能闻到外面依旧空气清新

   //实例5
   //只要在其下的绘图 透明度都会变成0.2
   ctx.globalAlpha=0.2;

   ctx.save();
   ctx.beginPath();
   //如果把它写到save() restore()它有只会作用于当前绘图环境
   ctx.globalAlpha=0.2;
   ctx.translate(250,250);
   ctx.strokeStyle="orange";
   ctx.rect(0,150,150,100);
   ctx.stroke();
   ctx.stroke();
   ctx.restore();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • canvas元素的基础知识 在页面上放置一个canvas元素,就相当于在页面上放置了一块画布,可以在其中进行图形的...
    oWSQo阅读 13,483评论 0 19
  •   HTML5 添加的最受欢迎的功能就是 元素。这个元素负责在页面中设定一个区域,然后就可以通过 JavaScri...
    霜天晓阅读 8,192评论 0 2
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    Looog阅读 9,362评论 3 40
  • 今天一整天都非常焦虑,昨天面试的公司人事问我考虑得怎么样了,我回答要再考虑一下,于是他们后来又打电话说薪水可以涨一...
    小狮子王后阅读 1,040评论 0 0
  • 早上6点起床,7点到项目,8点到达火车站。路上在yy上链接大组会,因为信号问题断断续续,中午12点之前赶到了学校。...
    阿麦_bdb1阅读 1,664评论 0 0