[Threejs]2D与3D场景间的交互问题(1)

应用场景: 从2D画布中拖拽一个元素进入3D画布区域, 触发一个事件,比如在3D场景中添加相应的模型对象.

可以通过@shopify/draggable库来实现改功能:

  • 通过npm安装js库
npm install @shopify/draggable --save
  • 具体实现代码示例如下:
import { Draggable } from '@shopify/draggable';

// ...
// 假设materialDiv是一个div父元素,包含了所有draggable的buttons
somefunction() {
    const parentDiv = document.getElementById('materialDiv');
    const dragEvt = new Draggable(parentDiv, {
      draggable: 'button',
      dropzone: 'div',
      mirror: {
        constrainDimensions: true,
      },
    });
    
    dragEvt.on('drag:start', (evt) => {
      // 在拖拽开始时,可以设置被拖拽的元素的样式,比如设置zIndex使得该元素处于画布最顶部
      (evt.data.source as HTMLButtonElement).style.zIndex = '1000';
      (evt.data.source as HTMLButtonElement).style.opacity = '0.5';
    });
    dragEvt.on('mirror:move', (evt) => {
	// do something
    });

    dragEvt.on('drag:stop', (evt) => {
      // 拖拽结束后,判断被拖拽元素的当前位置,如果在3D画布区域内,则可以触发自定义事件
      // const threeCanvas = ....
      const threeCanvas = document.getElementById('canvasName');
      const rect = threeCanvas.getBoundingClientRect();
      const evtX = evt.sensorEvent.clientX;
      const evtY = evt.sensorEvent.clientY;
    if (evtX < rect.left || evtX > rect.right || evtY < rect.top || evtY > rect.bottom) {
      // 不在3D画布内
      return;
    } else {
      // 落入3D画布内
    }
}
  • 发现的问题

使用了该js库后,发现编译时失败了:

ng build --prod --release

会报如下错误:

[error] SyntaxError: Unexpected token: keyword (default)

如果去掉--prod参数则能正常编译, 暂时未找到具体原因.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值