Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Two.JS:';未能执行';removeChild';在';节点';尝试从SVG中删除解释的形状时_Javascript_Svg_Removechild_Two.js - Fatal编程技术网

Javascript Two.JS:';未能执行';removeChild';在';节点';尝试从SVG中删除解释的形状时

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()

我使用Two.JS将形状渲染到舞台上,这些形状是使用Two.JS解释方法从SVG解释的

它们添加了“寿命”属性,在Two的渲染循环中,我检查插图,如果时间到了,将其删除

这在大多数情况下(大于99%)都有效,但有时形状会卡住,我会遇到以下错误:

未捕获NotFoundError:未能在“节点”上执行“removeChild”:要删除的节点不是此节点的子节点

下面是我删除插图的循环:

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);
        }
      },