你会画小猪佩奇吗?—— canvas

简介

Canvas 是 HTML5 新增的一个标签属性,一个可以使用脚本在其中绘制图像的 HTML 元素。它可以用来制作照片或者制作简单的动画,甚至可以进行实时的视频处理和渲染。Canvas 是由 HTML 代码配合高度和宽度属性而定义出的可绘制区域。JavaScript 代码可以访问该区域,类似于其他通用的 API,通过一套完整的绘图函数来动态生成图形。

应用场景

  1. 游戏

  2. 图表

  3. 动画

  4. HTML5 动效(codepen.io)

如何使用 Canvas

  • 添加 canvas 标签

<canvas id="myCanvas" width="500" height="500"></canvas>
  • 获得 canvas 元素

const canvas = document.getElementById("myCanvas");
  • 获得 canvas 上下文对象

const ctx = canvas.getContext("2d");
// 有两个参数getContext()可以采取。一个是渲染2D元素的标准2d上下文。另一种使用的webGL技术仍处于起步阶段。因此,大多数情况下,您可以在任何地方找到第二个画布的上下文(截至目前)

两个对象

  1. 元素对象(canvas 元素)和上下文对象(通过getContext('2d)方法获取到的 CanvasRenderingContext2D 对象)

  2. 元素对象相对于我们的画布,上下文对象相当于画笔,我们接下来的所有操作是基于上下文对象的。

线段

  • 注意:

    • fillstroke方法都是作用在当前的所有子路径

    • 完成一条路径后要重新开始另一条路径时必须使用 beginPath() 方法,beginPath 开始子路径的一个新的集合

代码示例

mhxZM4.png

矩形

代码示例

mhzstx.gif

弧形

代码示例

m4pJQU.png

圆角

代码示例

m4PJQf.png

贝塞尔曲线

坐标轴转换

填充图案

渐变

代码示例

m4mVSJ.png

阴影

文本

m4ng8e.png

代码示例

m4KZlQ.png

线段样式

  • lineGap 指定线条末端的样式

    • butt(默认值,末端为矩形)

    • round(末端为圆形)

    • square(末端为突出的矩形,矩形宽度不变,高度为线条宽度的一半)。

  • lineJoin 指定线段交点的样式

    • round(交点为扇形)

    • bevel(交点为三角形底边)

    • miter(默认值,交点为菱形)

  • ctx.miterLimit 指定交点菱形的长度,默认为 10

当 lineJoin 是 miter 时,用于控制斜接部分的长度,如果斜接长度超过 miterLimit 的值,变成 bevel

代码示例

m411b9.png

裁剪

代码示例

m48o90.png

全局透明度

绘制图片

Canvas 最佳实践(性能篇)

如何解决 Canvas 高分屏模糊问题

在分辨率比较高的屏幕,例如 ip6/6s/mac 等机器上,因为 canvas 绘制的是位图,所以会导致模糊,解决方法是根据屏幕分辨率修改 canvas 样式代码中的宽和高与 canvas 的 width 和 height 属性的比例

最后更新于