MDN Canvas教程

API Canvas​Rendering​Context2D即canvas.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。可以对其直接赋值#000、rgba(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”,结果是一致的。

canvas mdn_MDN文档 canvas教程笔记相关推荐

  1. 传智播客C/C++各种开发环境搭建视频工具文档免费教程

    传智播客作为中国IT培训的领军品牌,一直把握技术趋势,给大家带来最新的技术分享!传智播客C/C++主流开发环境免费分享视频文档中,就有写一个helloworld程序的示范.火速前来下载吧 所谓&quo ...

  2. python3 chm文档下载_python3.7.0官方参考文档 最新api文档 chm_Python教程_源雷技术空间...

    资源名称:python3.7.0官方参考文档 最新api文档 chm 1.新语法特性: PEP 563, 推迟评估类型注释 2.向后不兼容语法更改: async 和 await 现在保留关键字 3.新 ...

  3. 【ABAQUS2022】ABAQUS2022安装+汉化+帮助文档下载教程

    [ABAQUS2022]ABAQUS2022安装+汉化+帮助文档下载教程 安装教程是参考的这两个: https://www.bilibili.com/read/cv17607951/ https:// ...

  4. 开发技术指南 | 最全 Substrate 与 Polkadot 技术文档、教程、课程

    Substrate 让您可以通过制作及整合不同的模块来创建定制化的区块链.它附带了构建区块链所需的一切.使用Substrate 模块能轻松创建所需的内容,或制作自己的自定义逻辑,让构建区块链比以往更快 ...

  5. Java 使用word模板创建word文档报告教程

    上面是java 利用word模板生成的一个word报告文档,利用的是第三方类库Poi-tl 是实现的. poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你 ...

  6. 电脑上PDF文档怎么做笔记?

    电脑上PDF文档怎么做笔记?当我们在电脑上阅读PDF文档的时候,经常会需要给PDF文件做一些笔记或批注,比如给PDF文件添加高亮.下划线.删除线和各种图像以及给文档内容添加可隐藏式备注等,那如何给PD ...

  7. python新建word文档_使用Python 自动生成 Word 文档的教程

    当然要用第三方库啦 :) 使用以下命令安装: pip install python-docx 使用该库的基本步骤为: 1.建立一个文档对象(可自动使用默认模板建立,也可以使用已有文件). 2.设置文档 ...

  8. python自动生成和读取word_使用Python自动生成Word文档的教程

    当然要用第三方库啦 :) 使用以下命令安装: pip install python-docx 使用该库的基本步骤为: 1.建立一个文档对象(可自动使用默认模板建立,也可以使用已有文件). 2.设置文档 ...

  9. 13、《Libevent中文帮助文档》学习笔记13:Linux下集成、运行libevent

    Linux下编译libevent的指导可以参考<4.<Libevent中文帮助文档>学习笔记4:Linux下编译libevent>,完成编译.安装,生成so库后,其他程序即可依 ...

最新文章

  1. RHCE认证培训+考试七天实录(二)
  2. mysql if exists 数据表_使用IF NOT EXISTS创建数据表
  3. 学习使用 Manifest
  4. oracle 工作中遇到的函数
  5. 清洁单元测试图案–演示幻灯片
  6. 加速度计和陀螺仪数据融合
  7. scripts文件夹_常用Scripts整理
  8. 这11个JavaScript小技巧,你在大多数教程中是找不到的!
  9. redis客户端分析
  10. 我的世界如何开直连服务器,我的世界服务器如何连接 连接服务器教程
  11. 被脱库咋办?KMS 给你解决方案!
  12. 提升Transformer在不平稳时间序列预测上效果的方法
  13. mysql 主键 sql语句_Mysql主键相关的sql语句集锦
  14. 社会统计分析—基础知识
  15. [UE4][Material] Spline样条网格材质消失问题记录
  16. java文件拒绝访问权限_运行java文件,一直显示拒绝访问,谁知道哪里出了問題≥﹏≤...
  17. 网站优化排名的5个方法
  18. 快速上手Flask(一) 认识框架Flask、项目结构、开发环境
  19. C# 创建XML文件
  20. A级和AA级哪个好?护眼灯A级和AA级的区别

热门文章

  1. 电子书寻找方法汇总2
  2. react项目启动报错Plugin “react“ was conflicted
  3. 如何在比赛和项目中培养一个好的探索性分析(EDA)思维 —— 翻译自kaggle一位有趣的分享者
  4. mac怎么压缩pdf文件大小?
  5. Git合并单个文件和[y,n,q,a,d,/,K,j,J,g,e,?]
  6. C#,深度好文,精致好码,文本对比(Text Compare)算法与源代码
  7. 负反馈放大电路中自激振荡消除方法
  8. flex:0是什么意思,flex:0在IE11遇到的问题
  9. 数据链路层概述(主要解决的三个问题)
  10. SpringBoot (八)日志配置