【问题标题】:JQuery position() returns zeros in SafariJQuery position() 在 Safari 中返回零
【发布时间】: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


【解决方案1】:

好的,所以我没有弄清楚为什么在这种特殊情况下 position() 在 Safari 中不起作用,但我意识到我根本不需要用户 position()。我可以从 getBoundingClientRect().left 和 getBoundingClientRect().top 获得相同的数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    相关资源
    最近更新 更多