2017-09-22 35 views

回答

0

这需要对轨迹球代码进行简单的修改。

如果你看一下TrackballControls.js,一开始细节的键码,相关状态机(source code):

THREE.TrackballControls = function (object, domElement) { 

    var _this = this; 
    var STATE = {NONE: -1, ROTATE: 0, ZOOM: 1, PN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PANE: 4}; 

    this.object = object; 
    this.domElement = (domElement !== undefined) ? domElement : document; 

    // API 

    this.enabled = true; 
    this.screen = { left: 0, top: 0, width: 0, height: 0 }; 

这是关系到keydown()功能进一步下降(source code):

function keydown(event) { 

    if (_this.enabled === false) return; 

    window.removeEventListener('keydown', keydown); 

    _prevState = _state; 

    if (_state !== STATE.NONE) { 

     return; 

    } else if (event.keyCode === _this.keys[ STATE.ROTATE ] && ! _this.noRotate){ 

     _state = STATE.ROTATE; 

    } else if (event.keyCode === _this.keys[ STATE.ROTATE ] && ! _this.noZoom){ 

     _state = STATE.ZOOM; 

    } else if (event.keyCode === _this.keys[ STATE.ROTATE ] && ! _this.noPan){ 

     _state = STATE.PAN; 

    }   

所以,我没有机会测试这个,但你应该能够将第11行的PAN从2(右键的键码)更改为0(左键单击)或任何其他你想要的键码。请记住更改ROTATE以避免同时旋转和平移的容易出错的指令。


编辑:每@ TheJim01的有益修正,实际点击事件实际上触发发生在function mousedown(event)在脚本的393行。 event.button对应于状态机中的相应编号。对此感到抱歉。

+0

我相信你的意思是'mousedown'事件,而不是'keydown'。在将动作状态设置为当前鼠标按钮('_state = event.button;')后,会出现相关逻辑。 – TheJim01

+0

请阅读[为什么不在上传图片时提问]?(https://meta.stackoverflow.com/questions/285551/why-not-upload-images-of-code-on-so-when - 问一个问题) - 这也适用于回答。 – Rabbid76

+0

@AquaVitae非常感谢。它解决了。但我真的想要左键点击PAN和ROTATE键码。无论如何都有可能吗? – Mhd

相关问题