如何在画布上翻转形状或图像?

是否可以垂直或水平镜像形状?

要使用 Konva 翻转任何节点,可以使用负的 scaleX 来水平翻转,或 scaleY 来垂直翻转。

请记住,scale 属性是相对于节点的原点起作用的。例如,矩形的原点是左上角,圆形的原点是其中心。如果您想要改变节点的原点,可以使用 offsetXoffsetY 属性。要更好地理解原点和偏移,请查看 位置与偏移讨论

根据您的用例,您可能需要手动更改节点的 {x, y} 属性,以在缩放后保持其在原始位置。

说明:点击翻转按钮,查看它们是如何被镜像的。

Konva Mirror Shapeview raw
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/konva@9.3.18/konva.min.js"></script>
<meta charset="utf-8" />
<title>Konva Transparency for several Shapes Demo</title>
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
background: #f0f0f0;
}

#flip {
position: absolute;
top: 5px;
left: 5px;
}
</style>
</head>

<body>
<div id="container"></div>
<button id="flip">Flip horizontally</button>
<script>
var width = window.innerWidth;
var height = window.innerHeight;

var stage = new Konva.Stage({
container: 'container',
width: width,
height: height,
});

var layer = new Konva.Layer();
stage.add(layer);

var text1 = new Konva.Text({
x: 180,
y: 50,
text: 'Default text with no offset. Its origin is in top left corner.',
align: 'center',
width: 200,
});
layer.add(text1);

var text2 = new Konva.Text({
text: 'Text with the origin in its center',
width: 200,
align: 'center',
y: 100,
x: 270,
});
layer.add(text2);
// set horizontal origin in the center of the text
text2.offsetX(text2.width() / 2);

document.querySelector('#flip').addEventListener('click', () => {
layer.find('Text').forEach((text) => {
text.to({
scaleX: -text.scaleX(),
});
});
});
</script>
</body>
</html>