javascript - 从 snap svg 组中的相同位置删除和添加元素

标签 javascript html svg snap.svg

我有 5 个元素的 snap svg 组,例如;

let canvas = Snap('#svg');
let myGroup = canvas.g();

myGroup.add(canvas.rect(100, 200, 110, 220).attr({fill: '#000'}));
myGroup.add(canvas.circle(400, 400, 50).attr({fill: '#500'}));

// want to remove this element later
myGroup.add(canvas.rect(100, 200, 50, 60).attr({fill: '#050'}));

myGroup.add(canvas.text(50, 100, 'Some Text').attr({stroke: '#005'}));
myGroup.add(canvas.rect(700, 200, 110, 220).attr({fill: '#055'}));

然后我可以使用索引访问 myGroup 的特定元素,例如,如果我想更改文本的属性,我可以使用 myGroup[3] 因为它位于 myGroup 中的第 3 个索引。

现在我想删除第二个索引处的元素,然后在同一索引处添加一些其他元素,所以我使用了 remove() 方法;

myGroup[2].remove();
myGroup.add(canvas.path('M 100 200 l 30 35').attr({stroke: '#050'}));

但问题是;第 3 个和第 4 个索引处的元素向上移动(分别为第 2 个和第 3 个),新元素已添加到第 4 个索引。

有谁知道如何在同一索引处添加元素?

最佳答案

您可以使用insertAfterinsertBefore 方法来实现这一点。

示例:

如果您想用索引为 2 的 Canvas 组替换节点,请使用 remove 方法删除节点。

myGroup[2].remove();

并使用insertBefore方法插入新节点

canvas.path('M 100 110 l 30 35').attr({
   stroke: '#050'
}).insertBefore(myGroup[2]);

这将用新节点替换旧节点。

示例解决方案:

let canvas = Snap('#svg');

let myGroup = canvas.g();

myGroup.add(canvas.rect(100, 110, 110, 220).attr({
  fill: '#000'
}));
myGroup.add(canvas.circle(400, 400, 50).attr({
  fill: '#500'
}));

// want to remove this element later
myGroup.add(canvas.rect(100, 110, 50, 60).attr({
  fill: '#050'
}));

myGroup.add(canvas.text(50, 100, 'Some Text').attr({
  stroke: '#005'
}));
myGroup.add(canvas.rect(700, 200, 110, 220).attr({
  fill: '#055'
}));

function replaceElement() {
  myGroup[2].remove();
  canvas.path('M 100 110 l 30 35').attr({
    stroke: '#050'
  }).insertBefore(myGroup[2]);
}
#svg {
  width: 500px;
  height: 500px;
}

button {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/snap.svg/0.5.1/snap.svg-min.js" integrity="sha512-Gk+uNk8NWN235mIkS6B7/424TsDuPDaoAsUekJCKTWLKP6wlaPv+PBGfO7dbvZeibVPGW+mYidz0vL0XaWwz4w==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<button onclick="replaceElement()">replace</button>
<svg id="svg"></svg>

关于javascript - 从 snap svg 组中的相同位置删除和添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67659115/

相关文章:

javascript - 如何使用 jQuery 在 div 中查找不是 "hidden"类型的所有输入?

javascript - 使用 jQuery 和函数 .live() 检测到页面上的任何更改?

SVG 样式不适用于 illustrator

css - 如何创建 svg 投影?

javascript - 根据屏幕 :- css HTML5 Gallery 更改不同的背景图像

javascript - JQuery - 为什么这段代码无法从外部 url 加载图像?

html - 如何在 CSS 中将图像居中放置在两列之间?

html - Bootstrap 中的类别内联 block "buttons"

xml - 为什么命名空间参数?

javascript - 按下后按钮保持禁用状态