Javascript Two.JS:';未能执行';removeChild';在';节点';尝试从SVG中删除解释的形状时
我使用Two.JS将形状渲染到舞台上,这些形状是使用Two.JS解释方法从SVG解释的 它们添加了“寿命”属性,在Two的渲染循环中,我检查插图,如果时间到了,将其删除 这在大多数情况下(大于99%)都有效,但有时形状会卡住,我会遇到以下错误: 未捕获NotFoundError:未能在“节点”上执行“removeChild”:要删除的节点不是此节点的子节点 下面是我删除插图的循环:Javascript Two.JS:';未能执行';removeChild';在';节点';尝试从SVG中删除解释的形状时,javascript,svg,removechild,two.js,Javascript,Svg,Removechild,Two.js,我使用Two.JS将形状渲染到舞台上,这些形状是使用Two.JS解释方法从SVG解释的 它们添加了“寿命”属性,在Two的渲染循环中,我检查插图,如果时间到了,将其删除 这在大多数情况下(大于99%)都有效,但有时形状会卡住,我会遇到以下错误: 未捕获NotFoundError:未能在“节点”上执行“removeChild”:要删除的节点不是此节点的子节点 下面是我删除插图的循环: removeShapes: () => time = new Date().getTime()
removeShapes: () =>
time = new Date().getTime()
for shape, i in @_shapes by -1
if shape.lifeSpan
if time - shape.creationTime >= shape.lifeSpan
shape.remove()
@_shapes.splice i, 1
下面是发生错误的two.js中的相关代码
removeChild: function(id) {
var elem = this.domElement.querySelector('#' + id);
if (elem) {
this.elem.removeChild(elem);
}
},
这只发生在解释的svg上,而不发生在形状上。形状和解释的形状都返回两个多边形对象,所以这看起来很奇怪
我能想到的一件事是two.js使用它解释为多边形id的元素id,如果有两个元素具有相同的id,那么在尝试删除时会导致错误。但是,如果存在任何现有的插图,则alreadyIllustration检查似乎每次都能正常工作,停止添加插图
我还尝试将id设置为创建它的时间,而不是元素的id,这样它每次都是唯一的,但这会导致其他问题和错误
非常感谢。这并不是一个完整的解决方案,但我发现问题与窗口上的模糊/褪色事件以及Chrome处理此问题的方式有关。该错误似乎发生在窗口未对焦时,并且触发了当前显示的同一插图 该插图已从阵列中删除,但在窗口重新聚焦之前未从DOM中删除,这意味着检查将通过,并显示具有相同ID的同一插图的多个实例
为了防止问题发生,我禁用了窗口未聚焦时的事件,以便在窗口重新聚焦之前无法显示新插图。看起来您遇到了与前一篇文章类似的问题,在修改的数组中进行迭代。无论如何,我认为这可能是Two.js中的一个错误,因为看起来要删除的元素不是组的子元素。我现在就来解决这个问题。主分支上最新版本的two.js应该有一个解决方案:试试看——它不会再出错了。太棒了。。。客户服务怎么样。我会在这个前夜试一试,让你知道它是否修复了。实际上,这是我之前的问题。。。它们是相似但不同的问题酷,让我知道进展如何。
removeChild: function(id) {
var elem = this.domElement.querySelector('#' + id);
if (elem) {
this.elem.removeChild(elem);
}
},