Menu
×
   ❮     
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 画布 转换


HTML 画布转换

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

转换的六种方法是

  • 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 画布标签。
<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 画布标签。
<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 画布标签。
<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 画布标签。
<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 画布标签。
<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 画布标签。
<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 画布标签。
<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 画布标签。
<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 画布标签。
<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>
自己尝试 »

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.