【发布时间】:2017-03-19 13:11:39
【问题描述】:
定位工具提示/弹出窗口通常只是使用 getBoundingClientRect() 或 jQuery 的 offset() 函数(内部使用 getBoundingClientRect)来获取相对于文档或窗口,但是如果您放大某些 Webkit 浏览器,这些函数开始返回意外/错误的结果,因为 getBoundingClientRect 函数在 Webkit 中的实现很奇怪。这一直是个问题,并且由于某种原因从未得到解决。
问题:我如何(如果可能的话)计算元素相对于文档的精确像素偏移量不使用 getBoundingClientRect() 以便值 不 > 改变缩放?
【问题讨论】:
-
你能在这里澄清一些事情吗?您说“某些 webkit 浏览器”是否有特定的问题,例如它发生在 Chrome 中还是仅在 Opera 中?缩放是指移动设备上的捏缩放、桌面上的浏览器缩放(^+/^- 或⌘+/⌘-),还是 CSS 缩放?例如,我在 Chrome (Canary) 中通过制作一个可点击的 div 进行测试,并让它记录其 getBoundingClientRect 并在更改浏览器缩放级别后检查值,除了一两个子像素定位怪癖之外,我没有看到值发生变化。
-
我不确定确切的版本。我所知道的是它发生在我的手机上。使用最新的移动 Chrome。我确实在谈论捏缩放。对困惑感到抱歉。因此,当您放大(捏)时,例如 jQuery 的 offset().left 会发生变化。并且越靠近您“捏”的屏幕左边缘,offset().left 值就越大。
-
你能把一个简化的例子放在一起吗?我在本地没有看到这种情况发生,因此,如果您能够使用重现(或制作 JSFiddle/JSBin)所需的最低 HTML/CSS/JS 更新您的答案,这将对某人有很大帮助能够帮助您弄清楚发生了什么:)
-
当然。 output.jsbin.com/setogicota 在 Android 上的 Chrome 上打开,然后捏缩放。工具提示应该贴在输入的右下角,但事实并非如此。在 Chrome 上(我在 Linux 上),如果我放大它会按预期工作。如果我现在从左侧位置减去 scrollX,从顶部位置减去 scrollY,它就可以工作。但后来它在桌面 Chrome 上被搞砸了。看来改成 getBoundingClientRect 会逆转效果。
标签: javascript jquery google-chrome cross-browser webkit