1 Canvas 简介

Canvas 表示画布,现实生活中的画布是用来作画的。

HTML5 中的 Canvas :我们可以称它为“网页中的画布”。默认情况下,Canvas 是一块 300px*150px 的矩形画布,用户可以自定义画布的大小或为画布添加其他属性。

利用 Canvas 实现绘画:Canvas 并不是通过鼠标绘画的,而是用户需要通过 JavaScript 来控制画布中的内容,例如添加图片、线条、文字等。

2 使用 Canvas 绘制图形

2.1 <canvas> 标签

使用 HTML5 中的 <canvas> 标签在网页中创建一个画布,语法格式如下:

<canvas id="canvas" width="400" height="300">
    您的浏览器不支持canvas标签,请更新浏览器
</canvas>

上述代码定义了一个 id 为 canvas 的画布,并设置了画布的宽度为 400px,高度为 300px。

通过 JavaScript 的 getElementById() 方法获取到网页中的画布对象,代码如下所示:

var canvas = document.getElementById("canvas");

上述代码获取了 id 为 canvas 的画布,同时将获取的画布对象保存在变量 canvas 中。

context 对象:是画布的上下文,也叫做绘制环境,是所有的绘制操作 API 的入口。 context 对象可以使用 getContext() 方法获得,代码如下所示:

var context = canvas.getContext('2d');

上述代码中的参数 2d 代表画笔的种类,表示二维绘图的画笔。如果想要绘制三维图,可以把参数替换为 webgl

2d:代表一个平面,绘制图形时需要在平面上确定起始点,也就是“从哪里开始画”,这个点需要通过坐标来控制。

Canvas 的坐标系:从最左上角 0,0 开始。x 轴向右逐渐增加,y 轴向下逐渐增加。

2.2 绘制线条

线的定义:线是所有复杂图形的组成基础,想要绘制复杂的图形,首先要从绘制线开始。

线的组成:在绘制线之前首先要了解线的组成。一条最简单的线由三部分组成,分别为初始位置、连线端点以及描边。

初始位置:在绘制图形时,我们首先需要确定从哪里下“笔”,这个下“笔”的位置就是初始位置。

在画布中使用 moveTo(x, y) 方法来定义初始位置,其中 x 和 y 表示水平坐标轴和垂直坐标轴的位置,中间用 , 隔开。x 和 y 的取值为数字,表示像素值(单位省略)。

设置初始位置的示例代码如下所示:

context.moveTo(x, y);

连线端点:在画布中使用 lineTo(x, y) 方法来定义连线端点。和初始位置类似,连线端点也需要定义 x 和 y 的坐标位置。

定义连线端点的代码如下所示:

context.lineTo(x, y);

描边:通过初始位置和连线端点可以绘制一条线,但这条线并不能被看到。这时我们需要为线添加描边,让线变得可见。

使用画布中的 stroke() 方法,可以实现线的可视效果。

设置描边的代码如下所示:

context.stroke();

2.3 设置线条的样式

context.lineWidth=5;//设置线的宽度

context.strokeStyle="red";//设置线的颜色

context.lineCap="round";//设置圆形端点

context.fillStyle="pink";//设置背景颜色

除了执行 stroke() 方法根据路径进行描边,还可以使用 fill() 方法进行图形的填充,示例代码如下: context.fill();

2.4 设置线条的路径

路径的定义:路径是所有图形绘制的基础,通过初始位置和连线端点即可创建一条路径。

路径需要通过路径状态进行重置或闭合,来产生不同的路径样式。

路径的状态:

  • 重置路径

  • 闭合路径

重置路径的概念:

在同一画布中,即使我们添加再多的连线端点也只能有一条路径,如果想要开始新的路径就需要使用beginPath()方法,当出现beginPath()时即表示路径重新开始。

步骤二:重置路径

<script>
    var canvas = document.getElementById('canvas');
    var context = canvas.getContext('2d');
    
    context.moveTo(10,10);            // 定义初始位置
    context.lineTo(300,10);            // 定义链接端点
    context.lineWidth=5;            // 设置线的宽度
    context.strokeStyle='red';        // 设置线的颜色
    context.stroke();                // 描边
    context.beginPath();            // 重置路径
    context.moveTo(10,60);            // 定义初始位置
    context.lineTo(300,60);            // 定义链接端点
    context.lineWidth=10;            // 设置线的宽度
    context.strokeStyle='green';    // 设置线的颜色
    context.stroke();                // 描边
</script>

闭合路径的概念:

闭合路径就是将我们绘制的开放路径进行封闭处理,多点的路径闭合后会形成特定的形状。在画布中使用closePath()方法闭合路径。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <canvas id="canvas" width="400" height="300">
            您的浏览器不支持canvas标签,请更新浏览器
        </canvas>
        <script>
            var canvas = document.getElementById('canvas');
            var context = canvas.getContext('2d');
            
            context.moveTo(10,10);
            context.lineTo(10,100);
            context.lineTo(100,100);
            context.closePath();    // 闭合路径
            context.stroke();
        </script>
    </body>
</html>

3 Canvas 常用方法

3.1 canvas 绘制矩形

绘制一个红色的矩形

设置 fillStyle 属性可以是 CSS 颜色、渐变或图案。fillStyle 默认设置是 #000000(黑色)。

fillRect(x,y,width,height) 方法定义了矩形当前的填充方式。

3.2 canvas 绘制圆形

在canvas中绘制圆形,我们将使用以下方法:

arc(x, y, r, start, stop)

参数分别是:(圆心x坐标, 圆心y坐标, 半径r, 开始弧度, 结束弧度)。

结束弧度的计算公式:角度 * Math.PI / 180

context.arc(100, 100, 50, 0, 360 * Math.PI / 180);    // 绘制圆形
  context.stroke();    // 描边

3.3 canvas 绘制椭圆

在 canvas 中绘制椭圆, 我们将使用以下方法:

ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)

参数分别是:(椭圆圆心x坐标, 椭圆圆心y坐标, 半径x, 半径y, 旋转的角度, 起始角, 结束角, 顺时针/逆时针)

绘制一个椭圆

context.ellipse(120, 100, 100, 50, 0, 0, 360 * Math.PI / 180);    // 绘制椭圆
    context.stroke();    // 描边

3.4 canvas 绘制文本

使用 canvas 绘制文本,重要的属性和方法如下:

  • font - 定义字体

  • fillText(text,x,y) - 在 canvas 上绘制实心的文本

  • strokeText(text,x,y) - 在 canvas 上绘制空心的文本

使用“Arial”字体在画布上绘制一个高 30px 的实心文字:

context.font = '30px Arial';    // 设置文本样式
    context.fillText('Hello World', 10, 50);    // 绘制实心文字

3.5 canvas 渐变

渐变可以填充到矩形、圆形、线条、文本等,各种形状可以自定义不同的颜色。

有两种方式来设置 Canvas 渐变:

  • createLinearGradient(x, y, x1, y1):创建线条渐变;

  • createRadialGradient(x, y, r, x1, y1, r1):创建一个径向/圆渐变。

使用 createLinearGradient(),创建一个线性渐变。

当我们使用渐变对象,必须使用两种或两种以上的停止颜色。addColorStop() 方法指定停止颜色,位置可以是 0 至 1。

使用渐变,设置 fillStyle 或 strokeStyle 的值为渐变,然后绘制形状,如矩形、文本或一条线.

gradient.addColorStop(0, 'red');        // 设置渐变颜色(开始)
    gradient.addColorStop(1, 'green');    // 设置渐变颜色(结束)
    context.fillStyle = gradient;                // 设置渐变填充样式
    context.fillRect(10, 10, 200, 80);    // 绘制矩形

4 SVG 简介

SVG 英文全称为 Scalable Vector Graphics,意思为可缩放的矢量图。

HTML5 支持内联 SVG。

HTML <svg> 元素是 SVG 图形的容器。

SVG 有多种绘制路径、框、圆、文本和图形图像的方法。

4.1 什么是SVG ?

  • SVG 指可伸缩矢量图形(Scalable Vector Graphics);

  • SVG 用于定义用于网络的基于矢量的图形;

  • SVG 使用 XML 格式定义图形;

  • SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失;

  • SVG 是万维网联盟的标准。

4.2 SVG优势

与其他图像格式相比(比如 JPEG 和 GIF),使用 SVG 的优势在于:

  • SVG 图像可通过文本编辑器来创建和修改;

  • SVG 图像可被搜索、索引、脚本化或压缩;

  • SVG 是可伸缩的;

  • SVG 图像可在任何的分辨率下被高质量地打印;

  • SVG 可在图像质量不下降的情况下被放大。

4.3 SVG 与 Canvas 两者间的区别

SVG 是一种使用 XML 描述 2D 图形的语言。

Canvas 通过 JavaScript 来绘制 2D 图形。

SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。您可以为某个元素附加 JavaScript 事件处理器。

在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。

Canvas 是逐像素进行渲染的。在 Canvas 中,一旦图形被绘制完成,它就不会继续得到浏览器的关注。如果其位置发生变化,那么整个场景也需要重新绘制,包括任何或许已被图形覆盖的对象。

5 使用 SVG 绘制基本图形

5.1 绘制矩形

使用 rect 标签,主要属性:

  • x/y:绘图位置,

  • width/height:矩形长宽,

  • fill:填充颜色,默认黑色,

  • stroke:描边的颜色。

  • stroke-width:描边的宽度。

  • rx/ry:描边的圆角。

5.2 绘制圆和椭圆

5.2.1 绘制圆

方法一:使用矩形绘制。

示例代码:

<svg width="500" height="500"><rect x="100" y="10" width="100" height="100" rx="50"></rect>
</svg>

方法二:

使用专门的标签绘制,主要属性:

  • cx/cy:圆绘制的位置,圆心位置。

  • r:圆的半径。

5.2.2 绘制椭圆

5.3 绘制直线、折线、多边形

5.3.1 绘制直线

5.3.2 绘制折线

5.3.3 绘制多边形

- Canvas 简介- 使用 Canvas 绘制图形- Canvas 常用方法- SVG 简介- 使用 SVG 绘制基本图形相关推荐

  1. H5画布 canvas(一)canvas简介、绘制圆形矩形、案例饼状图绘制

    目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例:在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 ...

  2. H5画布 canvas(一)canvas简介、绘制圆形/矩形、案例饼状图绘制

    目录 1. canvas 简介 2. canvas 标签介绍 3. canvas 上下文 Context 4. 案例:在 canvas 画布中绘制表格 5. canvas 的 beginPath 状态 ...

  3. HTML5 canvas 实现回合制战棋游戏(1):加载和绘制图形

    HTML5 canvas 实现回合制战棋游戏(1):加载和绘制图形 游戏介绍 完整代码 代码目录 游戏运行 HTML5 canvas 绘制图形 canvas 介绍 绘制函数 加载图片 生物行走动画绘制 ...

  4. 绘制变形图形--Canvas的基本操作

    1.坐标的变换 对坐标的变换处理,有如下三种方式. 平移 移动图形的绘制主要是通过translate 方法来实现的,该方法定义如下所示. context. translate(x, y); trans ...

  5. html5游戏制作raf,HTML5之弧度角度与sincos(五角星绘制)、Canvas图形组合、阴影、图像绘制及createJS应用...

    弧度与sin及cos的关系 目的: 通过理解弧度与sin及cos的关系,可以根据弧度及半径求出旋转指定弧度后所到达的dx,dy坐标 弧度(angle)与角度(degree)的关系: 360角度 = 2 ...

  6. HTML5利用Canvas绘制图形(Canvas基本知识、绘制矩形、使用路径和图形组合)

    绘制图形有很多方法,可以借助Flash实现,也可以使用SVG和VML来绘图.本次将要学习一种新的灰土方法--使用Canvas元素,它是基于HTML5原生的绘图功能.使用Canvas元素,可以绘制图形, ...

  7. 精通Android自定义View(十)绘制篇Canvas分析之绘制Path

    1 Path常用方法简析 Path在2D绘图中是一个很重要的类. Path在这里可以绘制基本的图形,也可以绘制其他复杂的图形. 2 常用API解析与示例 2.1 xxxTo方法 Path类中提供了一套 ...

  8. 前端实现可绘制的canvas画布_前端图形学基础(五)——Canvas状态管理

    点击右上角的关注,不定期前端干货分享!! 欢迎来到我的前端图形学系列文章: 前端图形学基础(一)--Canvas基础入门 前端图形学基础(二)--Canvas基础 前端图形学基础(三)--Canvas ...

  9. 精通Android自定义View(十一)绘制篇Canvas分析之裁剪

    clipRect(int left, int top, int right, int bottom)  这个方法作用就是裁切一个矩形出来,但是图形不还是在canvas上面的,所以本质上还是裁切的can ...

最新文章

  1. 51CTO完成B轮融资,围绕1400万社区用户的IT学习平台要怎么做?
  2. NSIS 刷新ICO缓存
  3. 不唐突的JavaScript的七条准则
  4. BZOJ 1609 Usaco Eating Together
  5. HDU 6264 Super-palindrome
  6. ios framework 找不到.h_找不到好看的壁纸?上万张「高清壁纸」,都在iOS捷径里...
  7. 塑云科技基于 KafKa+OTS+MaxCompute 完成物联网系统技术重构
  8. ECCV 2020 Oral | BorderDet : 用边界特征做检测
  9. AI大一统:阿里达摩院发布多任务、多模态统一模型OFA
  10. 【C】动态申请二维数组
  11. 计算机视觉算法_RANSAC 估计
  12. 学习一下物联网协议 wifi zigbee 蓝牙等等----从wifi就开始 wifi和wifi协议 关于wifi协议本身我们需要了解那些东西?
  13. 使用海康8700综合平台对ds-6908解码器进行解码上墙大概配置
  14. 领域驱动设计思维导图
  15. 使用PS软件修改图片的尺寸
  16. Unity绿幕视频后期制作方案探索
  17. VUE+Canvas实现雷霆战机打字类小游戏
  18. 详细指南!手把手教你上手Tableau软件!
  19. 裸辞后进入华为,拿下34K测试岗offer....
  20. matlab做胶州湾地图,惊了,青岛也有了五环地图,快来看你家在几环?

热门文章

  1. 买电脑主要看什么 买笔记本主要看什么
  2. iphone如何设置微信腾讯服务器,iPhone手机的微信怎么设置成夜间模式?
  3. 1W字概括数仓建设和数据治理
  4. 怎么在百度做引流加人?百度精准引流客源?
  5. 汉字转换为拼音字头的工具类与原理
  6. 拳皇世界6月13服务器维护,拳皇世界闪退黑屏怎么办 游戏进不去的解决方案
  7. 手把手教你在 Vue3 中自定义指令
  8. JavaScript DOM获取元素
  9. 《暗黑破坏神2》重置版 采访记录(一)
  10. 【linux部署前端项目】