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();
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容

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