【问题标题】:Coordinate transformation in SVG inside Firefox with scrollbars带有滚动条的 Firefox 中 SVG 中的坐标转换
【发布时间】:2010-08-10 16:00:52
【问题描述】:

当从 FireFox 中查看 SVG 文件时,当滚动条出现时,我试图在用户坐标空间中计算正确的鼠标坐标。但这并不完全正确。即使水平或垂直滚动​​ SVG,也需要正确绘制基于 SVG 的工具提示。

我希望坐标转换在 IE 和 Firefox 浏览器中是正确的。此外,我想使用单源 Javascript+SVG 解决方案来做到这一点,该解决方案希望不需要特定于浏览器的条件代码。我目前使用的是 FireFox 3.5.10,但我会考虑升级到更新版本的 FireFox,而且我还没有测试过 IE。

我遇到的问题是滚动条的坐标偏移:当滚动条出现在 Firefox 中的 SVG 元素上时,鼠标坐标转换是不够的。作为调试坐标转换的辅助工具,我正在使用一个简单的 SVG 文件,该文件包含 Javascript 处理程序,所有这些都在一个文件中,它只是将鼠标光标处的十字准线绘制为 SVG 线对象。在svg_cross_hairs.svg 上找到它。如果将该文件加载到 FireFox 并缩短 FireFox 窗口直到出现滚动条,然后滚动垂直或水平滚动条,您会发现 Javascript 绘制的十字准线被水平或垂直滚动​​量偏移,为了在鼠标光标实际所在的位置或附近绘制工具提示对象,这是不正确的。

我确实看到了关于 scrollTop 属性的 Firefox: Get mouse coordinates of top-left corner of viewport 问题。

msg#00056 澄清element.{pageX,pageY,clientX,clientY} 属性和element.getscreenCTM 方法的含义存在混淆。

在用户坐标系中,有没有更简洁的方法来获得正确的鼠标坐标?

【问题讨论】:

    标签: firefox scroll svg horizontal-scrolling vertical-scrolling


    【解决方案1】:

    您可以使用 evt.pageX / evt.pageYwindow.pageXOffset / window.pageYOffset 来获得即使 svg 滚动也能工作的东西。

    【讨论】:

    • stackoverflow.com/questions/2599020/… 提供了有关滚动的更多信息,并且显然解决了我的代码 sn-p 没有解决的跨浏览器问题。我仍然对为什么在我派生代码 sn-p 的原始代码中似乎需要 getScreenCTM 感到困惑。对于我直接加载的 svg 文件,如果将 svg 嵌入到具有 构造的 HTML 页面中,是否需要 getScreenCTM? (我在上面的原始问题中添加了一个编辑)
    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多