我在 D3 上经常遇到这个问题。很多时候我喜欢在我的 SVG 上覆盖 HTML 对象。
我当前的策略是在名为 .html-overlay 的 SVG 元素旁边创建一个空 DIV。我根据我在 SVG 中为主图形设置的内部填充来定位它(例如:20px)。然后我使用以下函数(使用 jQuery)来确定 HTML 元素的位置:
//element is the object returned by D3 .append()
var getOffset: function(element) {
var $element = $(element[0][0]);
return {
left: $element.offset().left - $('.html-overlay').offset().left,
top: $element.offset().top - $('.html-overlay').offset().top
};
}
我想知道,必须有一些内部(不依赖于 jQuery)的方法来快速获取元素的偏移量。它非常有用(尤其是在元素经过多次平移、旋转、缩放等之后)
具有计算元素“中心”的偏移量、元素的最高点、最底部、最左边、最右边等的函数也很棒。
笔记:
getBoundingClientRect() 由于某种原因没有给出正确的数字:
var $element = $(element[0][0]);
console.log($element.offset(), element[0][0].getBoundingClientRect())
Object
left: 328
top: 248.8333282470703
__proto__: Object
ClientRect
bottom: 376.83331298828125
height: 139.99998474121094
left: 328
right: 478
top: 236.8333282470703
width: 150