【发布时间】:2019-06-18 13:33:20
【问题描述】:
我使用position() 和getBoundingClientRect() 来确定svg 对象是否在视口中可见。在 Chrome、Firefox 和 EDGE 中运行良好,但在 Safari 中却不行。
obj.position() 在 Safari 中总是返回 {top: 0, left: 0}。
可能出了什么问题?
options.elements.forEach(function (item) {
let obj = jQuery("#" + item);
if (!!obj && !!obj[0]) {
let position = obj.position();
let box = obj[0].getBoundingClientRect()
if (!!position) {
if (position.left <= left + width &&
position.left + box.width >= left &&
position.top <= top + height &&
position.top + box.height >= top)
onscreen.push(item);
}
}
});
这是 HTML 的一部分。我省略了svg的'd'的内容
<div id="svgmap">
<svg id="svg">
<g id="R918">
<path d="...." transform="translate(-0.08 0.25)"//>
</g>
<g id="C902J">
<path d="...." transform="translate(-0.08 0.25)"/>
</g>
<g id="C9002I">
<path d="" transform="translate(-0.08 0.25)"/>
</g>
</svg>
【问题讨论】:
-
在 SVG 中你可能想要使用 .getBBox() 而不是 getBoundingClientRect()
-
它们是完全不同的东西,getBBox 使用局部坐标系,getBoundingClientRect 使用全局坐标系。除了在最琐碎的文档中,它们很少相同。
标签: javascript jquery svg safari