html - 如何在缩放的 SVG 中将屏幕坐标转换为文档空间?

标签 html svg

我使用的是 Keith Wood 的 svg jquery 插件,而不是 HTML5 Canvas 。

我这样定义我的 svg 图像以缩放我的 svg 三角形图像以适合它的 div 容器:

  <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" viewBox="0 0 299 215" >
    <g>
    <polygon points="1,1 299,1 149,210" fill="blue" stroke="blue" stroke-width="0" class="votenow"/>
    </g>
    </svg>

但是我该如何匹配坐标系呢?

我想在三角形上的某个点捕获鼠标位置并在这些 X Y 坐标处绘制一个圆,但是由于坐标系不匹配,圆被绘制在不同的位置。

因此,一个圆会在点 10,10 处绘制,但例如看起来在 50,60 处。

人们如何应对这种情况?

谢谢。

最终解决方案:使用JQuery插件画圆,getScreenCTM()计算点数。

也许我不再需要 JQuery 插件,但现在就可以了。看不到如何仅使用插件来做到这一点。

$('#cvtriangle .tri').on( "click", function(e) {
    jqsvg = $('#cvtriangle').svg('get');
    svg = document.querySelector("svg");
    var pt = svg.createSVGPoint();
    pt.x = e.clientX;
    pt.y = e.clientY;
    pt = pt.matrixTransform(svg.getScreenCTM().inverse());
    jqsvg.circle(pt.x, pt.y, 5, {class: 'vote', fill: 'white', stroke: 'white', strokeWidth: 2, cursor: 'pointer'});
});

最佳答案

参见 http://msdn.microsoft.com/en-us/library/hh535760%28v=vs.85%29.aspx 这是我的示例代码。 对于这种用法,getScreenCTM 方法非常有用。

    <svg viewBox="0 0 300 300" onload="
        var c = document.getElementById('c');
        var cx = c.cx.baseVal;
        var cy = c.cy.baseVal;
        var svg = this;
        var point = svg.createSVGPoint();
        svg.onmousemove = function(e){
            point.x = e.clientX;
            point.y = e.clientY;
            var ctm = c.getScreenCTM();
            var inverse = ctm.inverse();
            var p = point.matrixTransform(inverse);
            cx.value = p.x;
            cy.value = p.y;
        };
    ">
        <rect width="100%" height="100%" fill="yellow"/>
        <circle id="c" r="10" fill="blue"/>
    </svg>

关于html - 如何在缩放的 SVG 中将屏幕坐标转换为文档空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22183727/

相关文章:

svg - 连接两条折线

linux - Firefox 上的 SVG,Linux 方式

javascript - html2canvas 忽略我的 svg 元素

jquery - 使用 .after 添加 </tr><tr> 不起作用

html - 页脚按钮固定了吗?

用于 Bootstrap 的表格上的 HTML 垂直文本

javascript - SVG 放大鼠标 - 数学模型

javascript - 如何删除或替换 SVG 内容?

javascript - jQuery,Firefox 和 Chrome 之间的区别

jquery - 根据另一个 div 中的元素更改一个 div 的 CSS 属性