组件中获取的HTML个元素坐标错误
Wrong coordinates of HTML elements obtained in components
我已将自定义工具提示添加到 gridster 项目中的 SVG 图表(所有示例均在 stackblitz 上提供)。工具提示 (div) 坐标使用 nativeElement
获得并使用 Renderer2
设置(trivial example - tooltip div is offset by 20px). However, when I project the chart widget within gridster item, the tooltip is always added to the wrong position (see the full example - 悬停在圆圈上)。似乎对于每个小部件,div 的坐标都会增加该小部件离 window(左和上)边缘的距离。
从视觉上看,这是工具提示与圆的距离:
但实际上(元素离屏幕边缘越远,tooltip放得越远):
我试过看看这是否是 <ng-content>
的问题,即 GridsterItem
中的内容投影,但在我制作自定义组件时它似乎并不像那样模仿那个(见this example)。为什么坐标在 gridster 项目中很时髦? renderer
设置坐标是相对于小部件,还是相对于 document
?
问题是您根据圆的客户端位置设置工具提示位置。您需要的是圆相对于其父项的位置。
public mouseEnter($event, data): void {
const circle = $event.target as HTMLElement;
const parent = circle.parentElement;
const circleCoords = circle.getBoundingClientRect();
const parentCoords = parent.getBoundingClientRect();
const relativeX = circleCoords.left - parentCoords.left;
const relativeY = circleCoords.top - parentCoords.top;
const x = `${relativeX + 20}px`;
const y = `${relativeY + 20}px`;
this.renderer.setStyle(this.tooltip.nativeElement, 'left', x);
this.renderer.setStyle(this.tooltip.nativeElement, 'top', y);
this.renderer.setStyle(this.tooltip.nativeElement, 'display', 'block');
this.renderer.setProperty(this.tooltip.nativeElement, 'innerHTML', data);
}
有关演示,请参阅 this stackblitz。
我已将自定义工具提示添加到 gridster 项目中的 SVG 图表(所有示例均在 stackblitz 上提供)。工具提示 (div) 坐标使用 nativeElement
获得并使用 Renderer2
设置(trivial example - tooltip div is offset by 20px). However, when I project the chart widget within gridster item, the tooltip is always added to the wrong position (see the full example - 悬停在圆圈上)。似乎对于每个小部件,div 的坐标都会增加该小部件离 window(左和上)边缘的距离。
从视觉上看,这是工具提示与圆的距离:
但实际上(元素离屏幕边缘越远,tooltip放得越远):
我试过看看这是否是 <ng-content>
的问题,即 GridsterItem
中的内容投影,但在我制作自定义组件时它似乎并不像那样模仿那个(见this example)。为什么坐标在 gridster 项目中很时髦? renderer
设置坐标是相对于小部件,还是相对于 document
?
问题是您根据圆的客户端位置设置工具提示位置。您需要的是圆相对于其父项的位置。
public mouseEnter($event, data): void {
const circle = $event.target as HTMLElement;
const parent = circle.parentElement;
const circleCoords = circle.getBoundingClientRect();
const parentCoords = parent.getBoundingClientRect();
const relativeX = circleCoords.left - parentCoords.left;
const relativeY = circleCoords.top - parentCoords.top;
const x = `${relativeX + 20}px`;
const y = `${relativeY + 20}px`;
this.renderer.setStyle(this.tooltip.nativeElement, 'left', x);
this.renderer.setStyle(this.tooltip.nativeElement, 'top', y);
this.renderer.setStyle(this.tooltip.nativeElement, 'display', 'block');
this.renderer.setProperty(this.tooltip.nativeElement, 'innerHTML', data);
}
有关演示,请参阅 this stackblitz。