javascript - 无法使用 viewbox 在 svg 中的正确位置正确添加圆圈?

标签 javascript jquery svg viewbox

我需要在 svg 中动态添加圆圈。这里它正确添加到 svg,但位置不正确。 在这里,我在 svg 内创建圆圈,并通过单击 svg 添加新圆圈来获取 x 和 y 位置。它从屏幕正确获取 clientX 和 clientY 位置,但新添加的圆圈未正确添加到正确的位置。我需要在 svg 上的选定位置添加新圆圈。

这是DEMO.

var xpos, ypos;
$("svg").click(function (e) {
    xpos = e.clientX;
    ypos = e.clientY;
    alert(xpos+' '+ypos);
});

$("#create").click(function (e) {
    var svgNS = "http://www.w3.org/2000/svg";
    var myCircle = document.createElementNS(svgNS, "circle");
    myCircle.setAttributeNS(null, "id", "mycircle");
    myCircle.setAttributeNS(null, "fill", 'blue');
    myCircle.setAttributeNS(null, "cx", xpos);
    myCircle.setAttributeNS(null, "cy", ypos);
    myCircle.setAttributeNS(null, "r", '6');
    myCircle.setAttributeNS(null, "stroke", "none");
    var svg = document.querySelector("svg");
    svg.appendChild(myCircle);
});

任何建议都值得赞赏。

最佳答案

类似这样的事情应该可以做到。

$("#create").click(function (e) {
    var svgNS = "http://www.w3.org/2000/svg";
    var myCircle = document.createElementNS(svgNS, "circle");
    myCircle.setAttributeNS(null, "id", "mycircle");
    myCircle.setAttributeNS(null, "fill", 'blue');
    myCircle.setAttributeNS(null, "r", '6');
    myCircle.setAttributeNS(null, "stroke", "none");
    var svg = document.querySelector("svg");
    svg.appendChild(myCircle);
    var pt = svg.createSVGPoint();
    pt.x = xpos;
    pt.y = ypos;
    var globalPoint = pt.matrixTransform(myCircle.getScreenCTM().inverse());
    var globalToLocal = myCircle.getTransformToElement(svg).inverse();
    var inObjectSpace = globalPoint.matrixTransform(globalToLocal);
    myCircle.setAttributeNS(null, "cx", inObjectSpace.x);
    myCircle.setAttributeNS(null, "cy", inObjectSpace.y);
});

这个question有更多详细信息。虽然它的解决方案不太正确。

关于javascript - 无法使用 viewbox 在 svg 中的正确位置正确添加圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17545959/

相关文章:

javascript - 在 JavaScript 中访问 HTML 元素

javascript - 为 Google Maps SVG 路径图标动态设置线性渐变

javascript - Canvas 与 SVG 之声波图像交互

javascript - 如何过滤 QuerySelectorAll 返回的元素

Jquery 将\n 替换为 <br/>?

jQuery Change() 不触发原型(prototype)事件处理程序

javascript - 如何在特定位置获取svg linearGradient的颜色

javascript - Sublime Text 2 中的 Node.js 构建系统

javascript - 我可以在 AngularJS {{ array [ {{index }} ] }} 中使用它吗?

javascript - 如何使用诸如 "function someName(){}"之类的名称调用函数?