我使用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>
答案 0 :(得分:-1)
好的,所以我没有弄清楚为什么在这种特殊情况下position()在Safari中不起作用,但是我意识到我根本不需要使用position()。我可以从getBoundingClientRect()。left和getBoundingClientRect()。top获取相同的数据