在鼠标悬停时调整现有矩形的大小
Resize An Existing Rectangle On Mouse Hover
我试了下教程,终于找到了解决办法,差不多。这是 stackblitz 的 link - Resize SVG Rectangle
这是一个场景,使用 SVG 绘制了一个矩形,默认周长工作正常。我的要求是当我将鼠标悬停在现有矩形上时调整现有矩形的大小,如果我单击任何其他部分而不是矩形,那么它应该从头开始绘制。所以现在,无论我做什么,它都会从头开始绘图,而不是调整现有绘图的大小。
仅供参考,这就是我尝试调整大小的方法:Resize Rectangle
这些是附加到 svg 元素的事件:
//This section starts drawing rectangle from scratch
startDrawing(evt: MouseEvent) {
this.createdShape = {
type: this.shapeType,
x: evt.offsetX,
y: evt.offsetY,
w: 0,
h: 0,
};
this.shapesToDraw.fill(this.createdShape); //This fills with the created shape
}
//This does the resizing but only when I start drawing a rectangle from scratch, doesn't imply resizing for existing rectangle
keepDrawing(evt: MouseEvent) {
this.createdShape.w = evt.offsetX - this.createdShape.x;
this.createdShape.h = evt.offsetY - this.createdShape.y;
}
//This stops drawing and sets **createdShape** to null
stopDrawing() {
this.createdShape = null;
}
我正在考虑检查是否有任何特定条件来检查调整大小,如下所示:
private resizeConMeet(evt: MouseEvent) {
}
但我不确定是否有任何方法可以做到这一点?希望得到建议或指导以使其发挥作用。
干得漂亮 :)
所以,感谢 StackBlitz,我可以调整代码。
主要思想:
- 当你开始画的时候,如果有的话尽量使用之前的形状
this.createdShape.x < evt.x < this.createdShape.x + w
this.createdShape.y < evt.y < this.createdShape.y + h
- 这意味着你不应该在停止绘制时擦除之前的形状(
this.createdShape = null
)
- 但这会产生一个错误,因为它会在鼠标移动时继续编辑形状。通过添加一个变量 (
isDrawing
) 来解决这个问题,当您开始绘制时将其设置为 true
并在停止绘制时设置为 false
。使用此变量可防止在不绘制时重绘矩形
请自己尝试。这里是my version
我试了下教程,终于找到了解决办法,差不多。这是 stackblitz 的 link - Resize SVG Rectangle
这是一个场景,使用 SVG 绘制了一个矩形,默认周长工作正常。我的要求是当我将鼠标悬停在现有矩形上时调整现有矩形的大小,如果我单击任何其他部分而不是矩形,那么它应该从头开始绘制。所以现在,无论我做什么,它都会从头开始绘图,而不是调整现有绘图的大小。
仅供参考,这就是我尝试调整大小的方法:Resize Rectangle
这些是附加到 svg 元素的事件:
//This section starts drawing rectangle from scratch
startDrawing(evt: MouseEvent) {
this.createdShape = {
type: this.shapeType,
x: evt.offsetX,
y: evt.offsetY,
w: 0,
h: 0,
};
this.shapesToDraw.fill(this.createdShape); //This fills with the created shape
}
//This does the resizing but only when I start drawing a rectangle from scratch, doesn't imply resizing for existing rectangle
keepDrawing(evt: MouseEvent) {
this.createdShape.w = evt.offsetX - this.createdShape.x;
this.createdShape.h = evt.offsetY - this.createdShape.y;
}
//This stops drawing and sets **createdShape** to null
stopDrawing() {
this.createdShape = null;
}
我正在考虑检查是否有任何特定条件来检查调整大小,如下所示:
private resizeConMeet(evt: MouseEvent) {
}
但我不确定是否有任何方法可以做到这一点?希望得到建议或指导以使其发挥作用。
干得漂亮 :)
所以,感谢 StackBlitz,我可以调整代码。
主要思想:
- 当你开始画的时候,如果有的话尽量使用之前的形状
this.createdShape.x < evt.x < this.createdShape.x + w
this.createdShape.y < evt.y < this.createdShape.y + h
- 这意味着你不应该在停止绘制时擦除之前的形状(
this.createdShape = null
) - 但这会产生一个错误,因为它会在鼠标移动时继续编辑形状。通过添加一个变量 (
isDrawing
) 来解决这个问题,当您开始绘制时将其设置为true
并在停止绘制时设置为false
。使用此变量可防止在不绘制时重绘矩形
请自己尝试。这里是my version