SVG- как определить опорные / опорные точки

Можно ли определить какую-то опорную / опорную точку внутри SVG? В идеале как атрибут, возможно пользовательский, поскольку я не нашел встроенного. Возможное применение такого атрибута было бы очень похоже на применение text-anchor: text-anchor

Моя главная цель - иметь возможность разместить один SVG поверх другого, точно так же, как разместить текст в определенной точке SVG. Идея состоит в том, что якоря каждого SVG должны совпадать внутри глобальной системы координации для простоты).

Спасибо за любую информацию!

Подобный вопрос: трансформировать-переводить

1 ответ

Ниже приведена недавно созданная мной функция, которая может оказаться полезной в этой ситуации. Он создает 8 равномерно расположенных опорных точек вокруг прямоугольника и отображает их по клику. Координаты точки привязки задаются вручную, но их можно легко добавить с помощью формулы.

      <!DOCTYPE html>
<html>
  <head>
    <title>SVG Rectangle with Anchor Points</title>
  </head>
  <body>
<svg id="svg" width="400" height="400" viewBox="0 0 400 400"></svg>

    <script>
// create the SVG element
var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute("width", "400");
svg.setAttribute("height", "400");
document.body.appendChild(svg);

// create the rectangle
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
rect.setAttribute("x", "50");
rect.setAttribute("y", "50");
rect.setAttribute("width", "300");
rect.setAttribute("height", "300");
rect.setAttribute("fill", "transparent");
rect.setAttribute("stroke", "black");
svg.appendChild(rect);

// create the anchor points
var anchorRadius = 5;
var anchorCoords = [
  {x: 50, y: 50}, // top-left corner
  {x: 200, y: 50}, // top edge midpoint
  {x: 350, y: 50}, // top-right corner
  {x: 350, y: 200}, // right edge midpoint
  {x: 350, y: 350}, // bottom-right corner
  {x: 200, y: 350}, // bottom edge midpoint
  {x: 50, y: 350}, // bottom-left corner
  {x: 50, y: 200}, // left edge midpoint
];


for (var i = 0; i < anchorCoords.length; i++) {
  var anchor = document.createElementNS("http://www.w3.org/2000/svg", "circle");
  anchor.setAttribute("cx", anchorCoords[i].x);
  anchor.setAttribute("cy", anchorCoords[i].y);
  anchor.setAttribute("r", anchorRadius);
  anchor.setAttribute("fill", "blue");
  anchor.setAttribute("opacity", "0");
  svg.appendChild(anchor);
}

// add click event to the SVG element to show/hide the anchor points
svg.addEventListener("click", function(event) {
  if (event.target === rect) {
    var anchors = svg.getElementsByTagName("circle");
    for (var i = 0; i < anchors.length; i++) {
      if (anchors[i].getAttribute("opacity") == "0") {
        anchors[i].setAttribute("opacity", "1");
      } else {
        anchors[i].setAttribute("opacity", "0");
      }
    }
  }
});

    </script>
  </body>
</html>
Другие вопросы по тегам