Closed ellisfan closed 6 years ago
这个看着有可能是bug,应该是在你的代码哪里有调用CM.clear()
?
但是看你给出的代码里面没有调用clear所以我也不知道在哪发生的问题。还有就是看起来好像用了一些模板系统?不知道这是不是也会影响。
at CommentManager.clear (vendor/CommentCore/CommentCoreLibrary.js:1077:29)
at HTMLDocument.<anonymous>
比较好的办法是找一下你测试代码的时候里面有没有哪里调用了clear。一般来讲调用clear应该是没问题的因为只会清除runline里面的弹幕(而runline默认是“还在显示的弹幕”)。这个状态属于弹幕还在runline里面但是却不在舞台上(dom里)。这有可能是在什么时候弹幕被别的东西手动移除了dom(因为调用finish都是会解除绑定的)。
在监测DOM的时候发现,报错时DOM是未移除的,也没有其他代码将它们移除。 而且还在不断的新增新的弹幕DOM。
因为是大屏应用,所以弹幕的开关使用了键位监测,在另一个快捷键的监听中执行了clearInterval(getMsg);clearInterval(iVal);CM.stop();CM.clear();
@jabbany 是否与transform有关呢?
我现在临时解决办法是把
this.stage.removeChild(cmt.dom)
注释掉,然后写了个setInterval定时去清理DOM
hmm,我还是没有足够的信息判断问题,不过我觉得可以采取下面的方式检查一下:
stage
里面没有那个 cmt
的 DOM,然而既然 DOM 已经插进去了,可以考虑如下调试:
CM.runline
里面的弹幕.stage
是否是正确的DOM元素另外,如果只是临时想解决问题(虽然不推荐这样,因为我就没法找到bug了),可以把 this.stage.removeChild(cmt.dom)
改成:
if (cmt.dom.parentNode !== null) {
cmt.dom.parentNode.removeChild(cmt.dom);
}
这样应该是OK的,不过这是一个比较掩盖症状的方法。。。
@jabbany 谢谢回复。因为是在前人的代码上新增需求,上线比较紧张,临时解决下。接下来会重新制作套新的模板。因为把弹幕这块单独拿出来就没有问题,估计还是和原本的代码冲突了。
我用了一个其他人的弹幕库,如果没有弹幕,调了clear也有类似的错误。
整理以下Issue,这个好久没有回应了就先关一下。 如果后续有类似问题,欢迎复活本issue(或者有新信息欢迎开新的issue)
问题就是我按下面的写法进行,在显示了大概20条左右的弹幕以后开始报错并且弹幕不显示,但是有插入DOM中。
先进行了初始化:
然后设置了一条初始的弹幕:
每三秒请求一次接口获取新的弹幕信息并插入弹幕池中: