在外部模块中使用时,Mouseup和mousemove事件会失败

时间:2017-01-20 11:41:48

标签: javascript three.js

我正在开发一个three.js项目,该项目在一个对象上实现一些相当标准的轨道控制(在这种情况下是一个粒子云)。

当我在我的根类中使用这个逻辑时(即使用所有的三个.js代码),它完美地工作。然而,我想要做的是将这个逻辑抽象为一个外部类,以便它不受影响。

当我执行此操作时,我的length = length -1mousemove事件不会触发。然而,触摸事件完全发射并且轨道按预期工作。

我已尝试在通话中使用mouseup,但它似乎没有太大区别。我也试过使用' window'取代'文件'因为我们现在在一个模块中,但似乎也没有。

我错过了什么?该模块如下所示:

preventDefault()

1 个答案:

答案 0 :(得分:0)

this不是您认为的那样。

当您致电controls.enableOrbiting()时,在enableOrbiting内,thiscontrols相同。但是当您将this.onDocumentMouseDown注册为事件处理程序时,this内的onDocumentMouseDown等于事件发射器,即document,而不是controls

编辑:在分配后Controls绑定。

您可以将每个函数绑定到Controls,如下所示:

var Controls = {}
Controls.onDocumentMouseDown = function (event) {
 ...
}.bind(Controls);

这种方式this始终为Controls,无论方法调用中使用的是this