king2088 / vue-3d-loader

VueJS and threeJS 3d viewer plugin
https://king2088.github.io/vue-3d-loader-docs
MIT License
226 stars 38 forks source link

如何给 mesh、camera 等添加事件 #15

Closed tudan110 closed 1 year ago

tudan110 commented 1 year ago

我基于 vue2,使用的版本是 1.2.9,该如何给 mesh、camera 等添加事件呢?

king2088 commented 1 year ago

我基于 vue2,使用的版本是 1.2.9,该如何给 mesh、camera 等添加事件呢?

能否具体点,添加什么样的事件或做何种操作?

tudan110 commented 1 year ago

我基于 vue2,使用的版本是 1.2.9,该如何给 mesh、camera 等添加事件呢?

能否具体点,添加什么样的事件或做何种操作?

我的需求是,点击模型的各个部件,弹出提示框。 但当我拖拽模型旋转时,此时也会触发 click 事件,如果鼠标恰巧点到了模型的某个部件,也会弹出提示框,此时与期望不符。 我原本想,这种拖拽操作是不是可以添加专门的监听事件,不知道该怎么添加。 后来想到了解决办法,在 mousedown 和 mouseup 时分别记录鼠标的位置,然后在 click 事件里比对鼠标前后的位置坐标,如果不同,说明拖动了,就不弹窗了。

onMousedown(event, intersected) {
  this.mousedownClient.x = event.clientX
  this.mousedownClient.y = event.clientY
},
onMouseup(event, intersected) {
  this.mouseupClient.x = event.clientX
  this.mouseupClient.y = event.clientY
}
onClick(event, intersected) {
  // 如果鼠标位置发生偏移,说明鼠标做了拖拽操作,则不弹出模型部件提示
  if (this.mousedownClient.x !== this.mouseupClient.x
    || this.mousedownClient.y !== this.mouseupClient.y
    || !intersected) {
    return
  }
  ... 其他代码省略
}
JaneYork commented 9 months ago

我基于 vue2,使用的版本是 1.2.9,该如何给 mesh、camera 等添加事件呢?

能否具体点,添加什么样的事件或做何种操作?

我的需求是,点击模型的各个部件,弹出提示框。 但当我拖拽模型旋转时,此时也会触发 click 事件,如果鼠标恰巧点到了模型的某个部件,也会弹出提示框,此时与期望不符。 我原本想,这种拖拽操作是不是可以添加专门的监听事件,不知道该怎么添加。 后来想到了解决办法,在 mousedown 和 mouseup 时分别记录鼠标的位置,然后在 click 事件里比对鼠标前后的位置坐标,如果不同,说明拖动了,就不弹窗了。

onMousedown(event, intersected) {
  this.mousedownClient.x = event.clientX
  this.mousedownClient.y = event.clientY
},
onMouseup(event, intersected) {
  this.mouseupClient.x = event.clientX
  this.mouseupClient.y = event.clientY
}
onClick(event, intersected) {
  // 如果鼠标位置发生偏移,说明鼠标做了拖拽操作,则不弹出模型部件提示
  if (this.mousedownClient.x !== this.mouseupClient.x
    || this.mousedownClient.y !== this.mouseupClient.y
    || !intersected) {
    return
  }
  ... 其他代码省略
}

后来怎么实现的? 点击弹窗动态数据