MDN文档 canvas教程笔记

MDN Canvas教程
API Canvas​Rendering​Context2Dcanvas.getContext('2d')返回的对象类型,几乎所有作图操作基于这个“上下文对象”而非canvas dom,下文以context2D作简称


只有矩形、文本、图片是可直接绘制显示的

fillRect(x, y, width, height)
绘制一个填充的矩形
strokeRect(x, y, width, height)
绘制一个矩形的边框
clearRect(x, y, width, height)
清除指定矩形区域,让清除部分完全透明。
fillText(text, x, y [, maxWidth])
在(x,y)位置绘制(填充)文本。
strokeText(text, x, y [, maxWidth])
在(x,y)位置绘制(描边)文本。
drawImage(image, dx, dy [, dWidth, dHeight])
drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
在(x,y)位置绘制图像。

其他均需要路径

beginPath()
新建一条路径
closePath()
闭合路径(即路径没有闭合时,从当前点生成一条直线路径连到起始点,使其闭合)
stroke()
绘制路径(即描边)
fill()
(根据设置)填充路径内部

路径

context2D路径方法(省略参数):
moveTo()
将一个新的子路径的起始点移动到(x,y)坐标。
lineTo()
使用直线连接子路径的终点到 x, y 坐标。
quadraticCurveTo()
添加一条二次贝赛尔曲线到当前路径。
bezierCurveTo()
添加一条三次贝赛尔曲线到当前路径。
arc()
添加一条圆弧路径。
arcTo()
根据控制点和半径添加一条圆弧路径(同时使用直线连接前一个点,原因下面解释)
ellipse()
添加一条椭圆路径。
rect()
创建一条矩形路径,矩形的起点位置是 (x, y) ,尺寸为 width 和 height。

额外
Path2D:直接的路径对象,其具有的方法context2D均有。可作stroke()和fill()的参数而被绘制。意义在于分离出“路径”,从而在多个canvas上重复绘制,更加灵活。
同时可以使用SVG path data来初始化,如new Path2D("M10 10 h 80 v 80 h -80 Z");

样式、变形等

1.颜色、线段粗细、字体、全局透明度等,直接操作context2D的属性。
最常用是fill​Style和strokeStyle。可以对其直接赋值#000rgba(0,0,0,0)等颜色,也可赋值为createLinearGradient(x1, y1, x2, y2)createRadialGradient(x1, y1, r1, x2, y2, r2)等对象创建的“渐变对象”。

2.变形、虚线距离等,通过context2D的方法操作
虚线:setLineDash(segments)。segments是一个Array数组,描述交替绘制线段和间距长度的数字。 如果数组元素的数量是奇数, 数组的元素会被复制并重复。例如, [5, 15, 25] 会变成 [5, 15, 25, 5, 15, 25]。取消虚线可直接设为空数组[]
变形:类似于css的transform属性的各个可用函数。如translate()、rotate()、scale()

重要
复杂作图时,经常需要变换原点进行旋转、绘图,或切换颜色、线宽,此时可用save()restore()方法以“栈”结构保存若干设置。


额外

1.当前路径为空,即调用beginPath()之后,或者canvas刚建的时候,第一条路径构造命令通常被视为是moveTo(),无论实际上是什么。如:
lineTo(10,10);被视为moveTo(10,10);
arc(0,0,50,0,Math.PI*2);被视为moveTo(0,50);arc(0,0,50,0,Math.PI*2);,即作圆时第一个下笔的点被作为moveTo的点,然后继续作圆

2.所有没有moveTo的跳跃性路径操作,被视为直线路径连接,如:
moveTo(100,100);arc(0,0,50,0,Math.PI*2);绘制后将发现有一条直线从(100,100)连到(0,50),即从当前点连线到作圆时第一个下笔的点。为了避免这种情况,最简单的方法就是重新beginPath()新开一条路径

3.isPointInPath()、isPointInStroke():前者判断某点是否在闭合路径内部,后者判断是否在“边”上。
关于如何判断内部,有:
(1)"evenodd": 奇偶环绕规则
以该点为端点,作一条足够长的射线,方向任意。如果与路径(边)相交次数为奇数,则在内部;偶数则在外部。
(2)"nonzero": 非零环绕规则(默认值)
以该点为端点,作一条足够长的射线,方向任意。以该射线为主视角,起始值为0,如果某条路径从左往右穿过,则+1;从右往左穿过,则-1;计算最终的值,如果非0,则在内部;如果为0,则在外部。
注意:我们无需确保每个方向的射线的最终值都一样。即可能90°算到是1,而180°算到是-1,最终他们都是“非0”,结果是一致的。

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

推荐阅读更多精彩内容

  • 本文不允许任何形式的转载! 阅读提示 本系列文章不适合以下人群阅读,如果你无意点开此文,请对号入座,以免浪费你宝贵...
    老霸王龙阅读 665评论 0 0
  • 神奇且强大的canvas 一.Canvas的基本介绍 1.什么是Canvas 定义:是HTML5提供的一种新标签,...
    Ainy尘世繁花终凋落阅读 10,554评论 1 18
  •   HTML5 添加的最受欢迎的功能就是 元素。这个元素负责在页面中设定一个区域,然后就可以通过 JavaScri...
    霜天晓阅读 2,974评论 0 2
  • canvas元素的基础知识 在页面上放置一个canvas元素,就相当于在页面上放置了一块画布,可以在其中进行图形的...
    oWSQo阅读 10,252评论 0 19
  • 听樊登讲课,最大的特点是生动,嬉笑怒骂,都是文章! 这堂课是探讨领导力,一个创业者绕不开的话题!创业不是单打独斗,...
    笑狮钱欣阅读 770评论 0 0