angular - SVG:为什么在图像上的 svg 中绘制的形状不可见?
问题描述
我正在与 Angular 合作。我的目标是在图像中绘制多边形。为此,我在图像中放置了一个 svg。img 和 svg 具有宽度和高度,并且多边形的点在数据库中,因此它们的值不能改变。问题是多边形显示不好。这是一个小例子:
这是我的代码:
HTML:
<div class="img-map">
<img #image src="https://content.gnoss.ws/imagenes/Documentos/ImagenesSemanticas/07aabdfa-981f-41f7-828d-78f21adb80a6/eb1d0185-7d5b-4d3a-b84a-5aefd95d3365.jpg" alt=""/>
<svg style="position:absolute; left:0px; top:0px; width: 100%; height: 100%">
<polygon class="polygonStyle" [attr.points]="stringPoints" />
</svg>
</div>
CSS:
.img-map {
overflow: auto;
position: relative;
max-width: calc(100vw - 450px);
}
.polygonStyle {
stroke: rgba(0, 0, 255, 0.75);
fill: none;
}
img {
top: 0;
left: 0;
border-radius: 10px;
height: auto;
width: 100%;
}
TS:
stringPoints = "1015,481 1043,578 1087,565 1055,467";
我做了一个stackblitz。我想这个问题与规模有关,但我不知道如何解决。
我试过的:
我不知道我做错了什么。谢谢!
解决方案
SVG 的默认视图框为 300 x 150,原点为 0,0。在您的示例中,多边形坐标为:1015,481 1043,578 1087,565 1055,467。所以它们都在 SVG 的可见区域之外。因此,什么都看不见。
您应该设置一个显式视图框,例如:
<svg viewBox="1000 400 100 200" style="position:absolute; left:0px; top:0px; width: 100%; height: 100%">
<polygon class="polygonStyle" [attr.points]="stringPoints" />
</svg>
它设置了一个原点为 1000,400 且大小为 100 x 200 的视图框。然后,您的 SVG 内容将被平移和缩放,以便所有坐标的 x 位置在 1000 到 1100 之间,y 位置在 400 到 200 之间600 位于 SVG 的可见区域内。
所以viewBox
属性会影响 SVG 的内容。width
,另一方面不影响 SVG 的内容,而是影响 SVG 的显示位置和大小height
。position
推荐阅读
- jmeter - 如何从使用未显示在响应数据中的随机数变量创建的会话代码中获取值
- reactjs - 材料表标题React中的Col span和Row span
- vaadin - 显示不同 UI 的选项卡 - Vaadin 14
- office365 - 如何获取“通用频道”中的信息?
- ios - 在 iOS13 Xamarin 中打开应用程序中的 URL/文件崩溃
- loopbackjs - 在 Loopback-4 e2e 测试中模拟任何服务
- php - 命令“make:auth”未定义 laravel 6
- python - builtins.TypeError:需要一个整数(获取类型元组)
- python-3.x - 您如何在不包括 0 的二维数组中找到最小值?
- javascript - reactjs应用程序中的函数解析错误