画布的概念

Canvas(画布)可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。画布在 HTML5 中是通过canvas标签来表现,通过 JavaScript 提供的画布 API,我们可以绘制各种各样的图形。

在画布中绘制图形全都是通过 X 轴以及 Y 轴来完成,X 轴与 Y 轴共同组成二维空间点坐标,所有的点组成栅格。与我们一般理解的坐标系不同,画布的原点在左上角,横向是 X 轴;纵向是 Y 轴。如下图:

线性图形

二维画布中,图形分为线性图形和非线性图形,线性图形就是由一条条线段组成的图形。在日常生活中熟知的几何图形:矩形、线段、曲线、圆形等。

线性图形中有一个非常重要的概念——路径,线性图形时一条条线段组成,这里的线段在画布中被定义为路径。路径其实就是线段,绘制路径开头必须有 beginPath()。rect() 函数绘制的矩形是特殊的,它可以不用 beginPath() 起头。所有线性图形在定义好其实点、结束点等一系列操作之后必须调用 stroke() 函数,例如:

ctx.rect(20, 20, 160, 200);
ctx.stroke();

非线性图形

与线性图形相反的就是非线性图形,二维画布中除了可以表示简单的几何图形以外,还可以把图片绘制进画布中,并且还可以操作像素点来绘制图形。非线性图形不需要使用 beginPath() 来开头。

画布的 API

在 JavaScript 世界中,所有的 HTML 标签的顶层接口都是 HTMLElement 来表示,这个接口用来描述标签们公共属性和方法。AudioContext 用于描述 audio 标签,并继承自 HTMLElement。

HTMLCanvasElement

HTMLCanvasElement 继承自 HTMLElement。HTMLElement 提供了 getContext(),用于获取二维画布、三维画布。二维画布的对象是 CanvasRenderingContext2D,其提供了大量的属性和方法来完成图形的绘制。

let canvas = document.getElementById('canvas');
console.dir(canvas);

打印 canvas 标签,原型是 HTMLCanvasElement:

CanvasRenderingContext2D

CanvasRenderingContext2D 对象可为画布提供 2D 渲染上下文。它用于绘制形状,文本,图像和其他对象。

let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
console.dir(ctx);

获取 CanvasRenderingContext2D:

属性

属性名 属性值 描述
fillStyle rgba、rgb、hex 填充颜色
strokeStyle rgba、rgb、hex 路径颜色
lineCap "butt" "round" "square" 路径两端样式
lineJoin "bevel" "round" "miter" 路径连接处的样式
lineWidth 数值类型 路径宽度
textAlign "start" "left" "center" "end" "right" 文本以 Y 轴为准的排列方式
textBaseline "top" "bottom" "middle" "alphabetic" "hanging" 文本以 X 轴为准的排列方式
font 符合 CSS font 语法 设置文本字体样式

方法

最新文章

  1. HTML组成与语法
  2. Android欢迎界面
  3. springmvc和struts2的差别
  4. codeforces195a
  5. noip2010-t2
  6. 【风马一族_Java】如何获取ACSLL表的值
  7. 简单的神经元算法实现(python)
  8. Java调用yahoo!API获取天气数据
  9. hdoj 1114 Piggy-Bank(完全背包+dp)
  10. cocoaPods的安装使用 以及 Carthage
  11. STM32F0使用LL库实现Modbus通讯
  12. Widows自带系统监控工具——24小时监控服务器性能
  13. python网络爬虫&&爬取图片
  14. [UE4]移动惯性
  15. Json Web Token JJWT
  16. C#编程(二十八)----------泛型类的功能
  17. Linux->卸载Mysql方法总结
  18. [转载] ./configure,make,make install的作用
  19. 【校招面试 之 C/C++】第31题 C++ 11新特性(二)之nullptr关键字
  20. DQL-联合查询

热门文章

  1. .NET性能优化-ArrayPool同时复用数组和对象
  2. 【Java】【数据库】索引为何使查询变得更快?--B+树
  3. 基于redis乐观锁实现并发排队 - 基于scrapy运行数量的控制
  4. 【WPF】自定义一个自删除的多功能ListBox
  5. [R语言] 基于R语言实现树形图的绘制
  6. Spark下中文分词常用项目
  7. appium基本使用(Android)
  8. Python简单api实现
  9. ArcGIS Python判断数据是否存在
  10. [Leetcode]环形链表 II