javascript - SVG 捕获鼠标坐标

标签 javascript svg

我知道之前有人在这里问过关于 svg 鼠标坐标的问题,但我对我目前遇到的行为感到很困惑,似乎没有一个线程能完全解决它。

我用来捕捉坐标的方法:

var pt = svg.createSVGPoint();  // Created once for document

function alert_coords(evt) {
    pt.x = evt.clientX;
    pt.y = evt.clientY;

    // The cursor point, translated into svg coordinates
    var cursorpt =  pt.matrixTransform(svg.getScreenCTM().inverse());
    console.log("(" + cursorpt.x + ", " + cursorpt.y + ")");
}

问题在于将鼠标点击坐标转换为用户空间中的 svg 坐标。我正在使用坐标在屏幕上拖动一个矩形,随着光标在 svg 空间中进一步向右移动,坐标变得越来越倾斜。为了以简单的方式对此进行测试,我在全局 svg 空间中放置了三个矩形,分别为 (100, 500)、(500, 500)、(1000, 500) 和 (1000, 200)。使用简单的日志记录功能,我收到的坐标(鼠标不精确加上或减去 5)是 (98, 473), (487, 470), (969, 471), (969, 190)。如您所见,鼠标沿着 x 或 y 轴移动得越远,它变得越不准确。我尝试使用与捕获鼠标坐标相同的方法在 fiddle 中复制它,但我不能在那里复制它......还有一件可能很重要的事情需要注意的是,当我记录 svg 文档时,宽度和高度设置为略小于视框值的值,即。给定视框值“0 0 1400 700”,宽度为 1380,高​​度为 676。无论如何,这是 fiddle ,所有 svg 属性都与它们在我的程序中相同。

http://jsfiddle.net/ASLma/11/

最佳答案

问题似乎是直接在浏览器中打开 svg。相反,我通过嵌入标签将它嵌入到 html 页面中,效果很好。我不确定为什么这对我的鼠标坐标精度很重要,但解决方案就是解决方案。

关于javascript - SVG 捕获鼠标坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12752519/

相关文章:

xml - 使用动画、脚本等将 SVG 字符串插入 *X*HTML 的正确方法

angular - 如何在 Angular 模块中嵌入 mat-icon svg 图标源(没有额外的 Http 请求)

javascript - 使用 jquery 调整图像大小,而不使用任何服务器端脚本

javascript - 数组推送在数组 forEach 中不起作用 - Javascript

javascript - 表排序器不工作

javascript - D3 - 防止父 <g> 元素触发点击事件

javascript - 如何在不使用 :after? 的情况下在 div 上创建三 Angular 形

javascript - 如何从 chrome API 函数为外部变量赋值?

html - svg 图像比位图更难在浏览器中渲染吗?

text - 带有弯曲文本路径的 SVG 文本对齐问题