threejs修改默认鼠标事件

使用的控制器是threejs轨迹球控制器TrackballControls,默认左键转动,滚轮缩放,右键平移,通过查阅文档,我们可以通过以下代码来修改鼠标操作:
在这里插入图片描述

  controls = new TrackballControls(camera, renderer.domElement);
  controls.mouseButtons = {
    //左键平移
    LEFT: THREE.MOUSE.PAN,
    //滚轮滑动
    MIDDLE: THREE.MOUSE.DOLLY,
    //右键旋转
    RIGHT: THREE.MOUSE.ROTATE,
  };

现在我的需求是:

  1. 鼠标左键无作用;
  2. 按下鼠标滚轮平移模型,滚动鼠标滚轮缩放模型;
  3. 按下鼠标右键转动模型。

左右键还好说,鼠标滚轮该怎么办呢?没办法只能去看控制器的源码
可以看到,这里定义了6种不同的状态,现在还不知道是干嘛的,接着往下看:
在这里插入图片描述在onMouseDown方法中,根据不同的按键修改了_state的值:
在这里插入图片描述首先我们知道,onmousedown事件中,button为0、1、2时分别代表按下了左键、滚轮、右键,正好上面这个方法是通过判断event.button的值来执行不同的操作的,我在按下左键时,把_state改为它上面定义的NONE,左键是不是就没有作用了呢?试一下,我将代表左键的0赋给NONE:
(需要先在项目中新建TrackballControls.js并将源码粘进去,通过相对路径的方式引入,不要直接从three引入,不然不生效)

    // 原来的
    // const STATE = {
    // NONE: -1,
    // ROTATE: 0,
    // ZOOM: 1,
    // PAN: 2,
    // TOUCH_ROTATE: 3,
    // TOUCH_ZOOM_PAN: 4,
    //  };
    
    // 修改后
    const STATE = {
      NONE: 0,
      ROTATE: 2,
      ZOOM: -1,
      PAN: 1,
      TOUCH_ROTATE: 3,
      TOUCH_ZOOM_PAN: 4,
    };

再将方法中的_state也改为NONE:

    function onMouseDown(event) {
      console.log("鼠标---", event.button);
      if (_state === STATE.NONE) {
        switch (event.button) {
          case scope.mouseButtons.LEFT:
           // _state = STATE.ROTATE;
            _state = STATE.NONE;
            break;

          case scope.mouseButtons.MIDDLE:
           // _state = STATE.ZOOM;
            _state = STATE.PAN;
            break;

          case scope.mouseButtons.RIGHT:
           //  _state = STATE.PAN;
            _state = STATE.ROTATE;
            break;
        }
      }
      ......

本来用于转动的左键真的没有作用啦!以此类推,把其他两个键也改了试试,真的生效啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值