菜单
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

HTML Canvas 转换


HTML Canvas 转换

通过转换,我们可以将原点移动到不同的位置、旋转和缩放它。

转换的六种方法是

  • translate() - 将画布上的元素移动到网格中的新点
  • rotate() - 顺时针或逆时针旋转画布上的元素
  • scale() - 放大或缩小画布上的元素
  • transform() - 将当前转换与参数描述的转换相乘
  • resetTransform() - 将当前转换重置为单位矩阵
  • setTransform() - 将当前转换重置为单位矩阵,然后运行由参数描述的转换

translate() 方法

translate() 方法用于通过 xy 移动对象/元素。

translate() 方法具有以下参数

参数 描述
x 水平方向的移动距离(左和右)
y 垂直方向的移动距离(上和下)

假设一个对象放置在位置 (10,10)。然后,我们使用 translate(70,70)。第二个对象也放置在位置 (10,10),但这意味着第二个对象将放置在 x 轴位置 80 (70 + 10) 和 y 轴位置 80 (70 + 10)。

我们来看一些例子

示例

首先,在位置 (10,10) 绘制一个矩形,然后将 translate() 设置为 (70,70)(这将是新的起点)。然后,在位置 (10,10) 绘制另一个矩形。请注意,第二个矩形现在从位置 (80,80) 开始。

您的浏览器不支持 HTML5 canvas 标签。
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.fillStyle = "red";
ctx.fillRect(10, 10, 100, 50);

ctx.translate(70, 70);

ctx.fillStyle = "blue";
ctx.fillRect(10, 10, 100, 50);
</script>
自己动手试一试 »

示例

首先,在位置 (10,10) 绘制一个矩形,然后将 translate() 设置为 (70,70)(这将是新的起点)。然后,在位置 (10,10) 绘制另一个矩形。请注意,第二个矩形现在从位置 (80,80) (70+10, 70+10) 开始。然后将 translate() 设置为 (80,-65)(这将是新的起点)。然后,在位置 (10,10) 绘制第三个矩形。请注意,第三个矩形现在从位置 (160,15) (80+80, 80-65) 开始。请注意,每次调用 translate() 时,它都会在前一个起点上累加。

您的浏览器不支持 HTML5 canvas 标签。
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.fillStyle = "red";
ctx.fillRect(10, 10, 100, 50);

ctx.translate(70, 70);

ctx.fillStyle = "blue";
ctx.fillRect(10, 10, 100, 50);

ctx.translate(80, -65);

ctx.fillStyle = "yellow";
ctx.fillRect(10, 10, 100, 50);
</script>
自己动手试一试 »

rotate() 方法

rotate() 方法通过角度旋转形状。

rotate() 方法具有以下参数

参数 描述
angle 旋转角度(顺时针)

提示: 角度单位是弧度,不是角度。使用 (Math.PI/180)*degree 进行转换。

示例

将矩形旋转 20 度

您的浏览器不支持 HTML5 canvas 标签。
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.rotate((Math.PI/180)*20);

ctx.fillStyle = "red";
ctx.fillRect(50, 10, 100, 50);
</script>
自己动手试一试 »

示例

这里我们添加了另一个矩形。两个矩形都将被旋转 20 度。

您的浏览器不支持 HTML5 canvas 标签。
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.rotate((Math.PI/180)*20);

ctx.fillStyle = "red";
ctx.fillRect(50, 10, 100, 50);

ctx.strokeStyle = "blue";
ctx.strokeRect(70, 30, 100, 50);
</script>
自己动手试一试 »


scale() 方法

scale() 方法放大或缩小画布上的元素。

scale() 方法具有以下参数

参数 描述
x 水平缩放因子(宽度)
y 垂直缩放因子(高度)

画布上的一个单位等于一个像素。如果我们设置缩放因子为 2,一个单位就变成两个像素,形状将绘制得两倍大。如果我们设置缩放因子为 0.5,一个单位就变成 0.5 像素,形状将绘制得一半大小。

示例

绘制一个矩形。缩放到 200%,然后绘制一个新矩形。

您的浏览器不支持 HTML5 canvas 标签。
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.strokeRect(5, 5, 25, 25);

ctx.scale(2, 2);

ctx.strokeStyle = "blue";
ctx.strokeRect(5, 5, 25, 25);
</script>
自己动手试一试 »

示例

绘制一个矩形。缩放到 50%,然后绘制一个新矩形。

您的浏览器不支持 HTML5 canvas 标签。
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.strokeRect(15, 15, 25, 25);

ctx.scale(0.5, 0.5);

ctx.strokeStyle = "blue";
ctx.strokeRect(15, 15, 25, 25);
</script>
自己动手试一试 »

示例

绘制一个矩形。将宽度缩放到 200%,高度缩放到 300%,然后绘制一个新矩形。

您的浏览器不支持 HTML5 canvas 标签。
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.strokeRect(5, 5, 25, 25);

ctx.scale(2, 3);

ctx.strokeStyle = "blue";
ctx.strokeRect(5, 5, 25, 25);
</script>
自己动手试一试 »

transform() 方法

transform() 方法将当前转换与此方法参数描述的矩阵相乘。这允许您缩放、旋转、平移(移动)和倾斜上下文。

transform() 方法替换变换矩阵,并将其与由以下描述的矩阵相乘:

a c e
b d f
0 0 1

transform() 方法具有以下参数

参数 描述
a 水平缩放
b 水平倾斜
c 垂直倾斜
d 垂直缩放
e 水平移动
f 垂直移动

示例

绘制一个黄色矩形,使用 transform() 运行新的变换矩阵。绘制一个红色矩形,运行新的变换矩阵,然后绘制一个蓝色矩形。请注意,每次调用 transform() 时,它都会在前一个变换矩阵上累加。

您的浏览器不支持 HTML5 canvas 标签。
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.fillStyle = "yellow";
ctx.fillRect(10, 10, 200, 100)

ctx.transform(1, 0.5, -0.5, 1, 30, 10);

ctx.fillStyle = "red";
ctx.fillRect(10, 10, 200, 100);

ctx.transform(1, 0.5, -0.5, 1, 30, 10);

ctx.fillStyle = "blue";
ctx.fillRect(10, 10, 200, 100);
</script>
自己动手试一试 »

resetTransform() 方法

resetTransform() 方法将当前转换重置为单位矩阵。

这等同于调用:ctx.setTransform(1,0,0,1,0,0)


setTransform() 方法

setTransform() 方法将当前转换重置为单位矩阵,然后运行由参数描述的转换。这允许您缩放、旋转、平移(移动)和倾斜上下文。

setTransform() 方法具有以下参数

参数 描述
a 水平缩放
b 水平倾斜
c 垂直倾斜
d 垂直缩放
e 水平移动
f 垂直移动

示例

绘制一个黄色矩形,重置并使用 setTransform() 运行新的变换矩阵。绘制一个红色矩形,重置并运行新的变换矩阵,然后绘制一个蓝色矩形。请注意,在此示例中,红色矩形未显示,因为它位于蓝色矩形下方。

您的浏览器不支持 HTML5 canvas 标签。
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");

ctx.fillStyle = "yellow";
ctx.fillRect(10, 10, 200, 100)

ctx.setTransform(1, 0.5, -0.5, 1, 30, 10);

ctx.fillStyle = "red";
ctx.fillRect(10, 10, 200, 100);

ctx.setTransform(1, 0.5, -0.5, 1, 30, 10);

ctx.fillStyle = "blue";
ctx.fillRect(10, 10, 200, 100);
</script>
自己动手试一试 »

×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持