首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在标签中添加SVG圆圈

如何在标签中添加SVG圆圈
EN

Stack Overflow用户
提问于 2018-04-27 09:29:36
回答 3查看 1.3K关注 0票数 0

下面的圆圈标签在标签内:

代码语言:javascript
复制
<circle cx="111.70110487400142" cy="134.60212936975006" r="10" stroke="#000000" fill="#000000" stroke-width="0" data-pdf-annotate-id="8e1b063b-ec08-4c73-8b86-d8e8cce5615e" data-pdf-annotate-type="fillcircle" aria-hidden="true" transform="scale(1.33) rotate(0) translate(0, 0)"></circle>

现在,我必须在标记中附加这个生成的圆圈,如下所示

代码语言:javascript
复制
<a href="#">
<circle cx="111.70110487400142" cy="134.60212936975006" r="10" stroke="#000000" fill="#000000" stroke-width="0" data-pdf-annotate-id="8e1b063b-ec08-4c73-8b86-d8e8cce5615e" data-pdf-annotate-type="fillcircle" aria-hidden="true" transform="scale(1.33) rotate(0) translate(0, 0)"></circle>
</a>

更新:

代码语言:javascript
复制
<svg class="annotationLayer" width="1118.53" height="1582.7" data-pdf-annotate-container="true" data-pdf-annotate-viewport="{&quot;viewBox&quot;:[0,0,841,1190],&quot;scale&quot;:1.33,&quot;rotation&quot;:0,&quot;offsetX&quot;:0,&quot;offsetY&quot;:0,&quot;transform&quot;:[1.33,0,0,-1.33,0,1582.7],&quot;width&quot;:1118.53,&quot;height&quot;:1582.7,&quot;fontScale&quot;:1.33}" data-pdf-annotate-document="/uploads/docs/Vishnu/file/IBC-CW1a-DE-02_2.pdf" data-pdf-annotate-page="1" style="width: 1118.53px; height: 1582.7px;">

<circle cx="138.76877404693374" cy="82.72243012162977" r="10" stroke="#000000" fill="#000000" stroke-width="0" data-pdf-annotate-id="b91a7011-656c-48d6-9f1c-62ac4bfc4f91" data-pdf-annotate-type="fillcircle" aria-hidden="true" transform="scale(1.33) rotate(0) translate(0, 0)"></circle>

</svg>


function createCircle(a) {
      var circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
      (0, _setAttributes2.default)(circle, {
        cx: a.cx,
        cy: a.cy,
        r: a.r
        });
        var spot_anchor = document.createElement("a")
        console.log(spot_anchor)
        spot_anchor.appendChild(circle)
        console.log(spot_anchor)

   console.log('Create_circl1')
      return circle;
    }

如何通过使用javascript来完成任务呢?

EN

回答 3

Stack Overflow用户

发布于 2018-04-27 09:51:20

您的circle需要在svg标记中,否则它在html中是没有意义的。因此,按照制作circle的方式创建包装SVG,然后将circle附加到该包装,并将svg附加到anchor中。

代码语言:javascript
复制
function createCircle( a ){

  var svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );
  var circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
  var anchor = document.createElement( 'a' );

  circle.setAttribute( 'cx', a.cx );
  circle.setAttribute( 'cy', a.cy );
  circle.setAttribute( 'r', a.r );
  
  svg.setAttribute( 'viewBox', `${a.x - a.r} ${a.y - a.r} ${a.r * 2} ${a.r * 2}` );
  svg.setAttribute( 'width', `${a.r * 2}` );
  svg.setAttribute( 'height', `${a.r * 2}` );
  
  svg.appendChild( circle );
  anchor.appendChild( svg );

  return anchor;
  
}

document.body.appendChild( createCircle({ cx: 10, cy: 10, r: 10 }) );

不应将fillstroke等属性直接添加到a标记中,因为这些属性不受支持且无效。在这种情况下,您应该使用data属性。甚至可以考虑使用data-svg-attributes="{'cx':10,'cy':10,'r':10}",并在需要获取正确数据时使用JSON.parse。更新:如果在包装标记的fill属性中声明这些属性,那么fillstroke属性将被继承,因此您可以使用它们(又名style="stroke: red;")。

票数 3
EN

Stack Overflow用户

发布于 2018-04-28 05:49:14

您正在以错误的方式创建<a>元素。您正在使用:

代码语言:javascript
复制
document.createElement("a")

这将在HTML命名空间中创建一个<a>元素。换句话说,一个HTML <a>元素。

您需要创建一个SVG <a>元素,这是完全不同的,即使它有相同的名称。

这样做的方式与创建<circle>元素的方式相同:

代码语言:javascript
复制
document.createElementNS('http://www.w3.org/2000/svg', 'a');
票数 3
EN

Stack Overflow用户

发布于 2018-04-27 09:33:13

appendChild、replaceNode等将从树中移除节点,然后再重新定位它,因此(由于您含糊地问了它,我对atag是否存在有0的概念,所以我假设它在那里,否则使用createElementNS创建它):

代码语言:javascript
复制
yourSvg = document.querySelector("svg");
    yourCircle = svg.querySelector("circle");
    yourATag = svg.querySelector("a");
    yourATag.appendChild(yourCircle)

A标记不是可视元素,它的边界框将等于内部的内容。如果你想知道:

https://jsfiddle.net/ibowankenobi/4t44n8jo/4/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50059361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档