Two.JS: '执行失败'removecchild '& # 39;节点# 39;当试图删除从
Two.JS : 'Failed to execute 'removeChild' on 'Node' when trying to remove shapes interpreted from SVG
我使用Two.JS将使用Two.JS解释方法从SVG中解释的形状渲染到舞台。
这些添加了一个寿命属性,在Two的渲染循环中,我检查插图,如果时间到了就删除它。
这是工作的大多数时间(>99%),但偶尔形状卡住,我得到这个错误:
Uncaught NotFoundError: Failed to execute 'removeChild' on 'Node':要删除的节点不是此节点的子节点。
showIllustration: (which) =>
alreadyIllustration = false
for shape, i in @_shapes
if shape.isIllustration is true
alreadyIllustration = true
if alreadyIllustration is false
switch which
when 'food'
if Math.random() > 0.49
id = 'currywurst'
else
id = 'pretzel'
when 'mascot'
if Math.random() > 0.49
id = 'ample'
else
id = 'bear'
when 'landmark'
if Math.random() > 0.49
id = 'tower'
else
id = 'tor'
illustration = @_two.interpret document.getElementById id
illustration.center().translation.set @_two.width / 2, @_two.height / 2
@_foreGround.add illustration
illustration.lifeSpan = 100
illustration.creationTime = new Date().getTime()
illustration.isIllustration = true
@_shapes.push illustration
,这里是我的循环来删除插图:
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上,而不是形状上。形状和解释形状都返回2。多边形对象,所以这看起来很奇怪。
我能想到的一件事是,two.js使用元素的id,它解释为多边形的id,如果有两个元素具有相同的id,那么这将导致一个错误,当试图删除。但是,如果存在任何插图,那么每次停止添加插图时,alreadyIllustration检查似乎都能正确工作。
我还尝试将id设置为它创建的时间,而不是元素的id,因此每次都是唯一的,但这会导致其他问题和错误。
许多谢谢。这并不是一个完整的修复,但我发现这个问题与窗口上的模糊/褪色事件有关,以及Chrome处理这个问题的方式。当窗口不在焦点中时,错误似乎发生了,并且当前显示的相同插图被触发。
插图从数组中删除,但直到窗口重新聚焦后才从DOM中删除,这意味着检查将通过,并且显示具有相同ID的相同插图的多个实例。
为了防止问题发生,我在窗口不在焦点时禁用了事件,因此在窗口恢复焦点之前不会显示新的插图。
相关文章:
- 节点.js快速删除 req.body 不起作用
- 删除HTML节点而不删除其子节点
- jquery重复节点匹配和删除
- 节点.js - 从 JSON 对象中删除空元素
- 使用jQuery从强制布局节点中删除所有.fixed类
- 如何删除javascript中的节点,而不需要父节点为null
- 在 D3js 强制图中添加和删除节点
- domparser删除节点不工作
- jQuery如何用1行来附加html和删除子节点
- 2秒后删除新的jQuery预处理节点
- 如何在JavaScript中删除子节点触发点击事件时的父节点
- Kendo TreeView-只向没有子节点的父节点添加删除图像图标
- 如何使用vanillaJS将mp4视频插入到具有特定维度的html文档中,播放2秒,然后删除节点
- 如何使用onclick javascript动态添加,删除列表中的节点
- 使用 JavaScript 从 XML 中删除子节点
- 在不删除/附加 DOM 节点的情况下对 DOM 节点进行重新排序
- 删除节点的内联事件处理程序/属性
- Javascript .removeChild() 只删除节点
- 如何删除文本节点
- 如何使用 jstree 获取每个已删除节点的父节点