threeJS中对模型的点击事件,单击还是双击,先放个简单的例子👇

控制台根据鼠标的点击次数进行输出,注意的是双击事件时,先打印单击再双击

关于threeJS模型的引入方法,可以看这个☞Three.js 模型加载及加载简单动画_threejs预览cad-CSDN博客

threeJS的事件是计算射线和模型的交点的方法,其中核心是判断event.detail属性,分别打印下单双击事件下的event

单击时,可以看出下面截图中event.detail值为1

双击时,可以看出下面截图中event.detail值为2

所以根据event.detail属性进行点击事件判断即可实现

直接贴一段代码吧

    // 校验控制器旋转的时候不触发点击事件
    boxClickEvent() {
      const self = this;
      let x, y;
      //获取鼠标按下的位置
      this.renderer.domElement.addEventListener('mousedown', function (event) {
        x = event.pageX;
        y = event.pageY;
      });
      // 鼠标释放
      this.renderer.domElement.addEventListener('mouseup', function (event) {
        const newX = event.pageX;
        const newY = event.pageY;
        if (x == newX && y == newY) {
          // 位置相同的操作
          self.onDocumentMouseDown(event);
        }
      });
    },
    //获取点击的事件
    onDocumentMouseDown(event) {
      const raycaster = new THREE.Raycaster();
      const mouse = new THREE.Vector2();
      //转换为webgl坐标系下的鼠标位置
      mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
      mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
        if (event.detail !== 2) { // 判断点击次数
           console.log('单击',event);
            
        } else {
           console.log('双击击',event);
        }
    },

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐