- HTML 画布教程
- HTML 画布 - 主页
- HTML 画布 - 简介
- 环境设置
- HTML Canvas - 第一个应用程序
- HTML Canvas - 绘制 2D 形状
- HTML Canvas - 路径元素
- 使用路径元素的 2D 形状
- HTML 画布 - 颜色
- HTML Canvas - 添加样式
- HTML Canvas - 添加文本
- HTML Canvas - 添加图像
- HTML Canvas - 画布时钟
- HTML Canvas - 转换
- 堆肥和修剪
- HTML Canvas - 基本动画
- 高级动画
- HTML Canvas 有用的资源
- HTML Canvas - 快速指南
- HTML Canvas - 有用的资源
- HTML Canvas - 讨论
HTML Canvas - 堆肥和剪辑
当需要绘制多个形状时,我们通常会在 Canvas 元素中相互绘制形状。我们可以使用globalCompositeOperation属性来排序复合形状,还有另一个属性 Clip 可以帮助我们从构造的形状中隐藏不需要的部分。属性如下所述
globalCompositeOperation - 通过使用此属性,我们可以遮盖现有形状、在现有形状上绘制新形状以及清除部分。下表提到了该属性接受的值。
来源结束 |
来源 |
源出 |
源头之上 |
目的地结束 |
目的地输入 |
目的地输出 |
目的地顶部 |
打火机 |
复制 |
异或 |
乘 |
屏幕 |
覆盖 |
变暗 |
减轻 |
颜色减淡 |
颜色烧伤 |
强光 |
柔光 |
不同之处 |
排除 |
色调 |
饱和 |
颜色 |
亮度 |
例子
以下示例实现了堆肥属性。代码如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> Composting </title> </head> <body onload="composting();"> <canvas id="canvas" width="400" height="250" style="border: 1px solid black;"></canvas> <script> function composting() { var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); context.fillStyle = 'blue'; context.fillRect(25, 25, 200, 200); context.fill(); context.globalCompositeOperation = 'darken'; context.fillStyle = 'purple'; context.fillRect(125, 25, 200, 200); context.fill(); context.fillStyle = 'yellow'; context.fillRect(225, 25, 100, 200); context.fill(); } </script> </body> </html>
输出
上述代码返回的输出是
剪切类似于使用路径在画布元素中构建形状,但它的作用就像一个遮罩,可以删除所获得形状中不需要的部分。下面给出实现裁剪的方法
Clip() - 此方法将构建的路径形状转换为剪切路径。它通常用来代替closePath()函数,后者将其转换为剪切路径,而不是描边或填充路径。
剪辑示例
下面的代码实现了canvas元素的裁剪方法。
<!DOCTYPE html> <html lang="en"> <head> <title> Clipping </title> </head> <body onload="clipping();"> <canvas id="canvas" width="400" height="250" style="border: 1px solid black;"></canvas> <script> function clipping() { var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); context.fillStyle = 'skyblue'; context.fillRect(0, 0, 400, 250); context.fill(); context.beginPath(); context.arc(200, 125, 100, 1 * Math.PI, 5 * Math.PI); context.fillStyle = 'orange'; context.fill(); context.clip(); } </script> </body> </html>
输出
上述代码的输出如下所示