事件
大约 2 分钟
事件
事件(Event)指的是由系统事先设定的、能被对象识别和响应的动作,事件是指对象对于外部动作的响应,当对方发生了某个事件,就会执行于此事件对应的代码。比如用鼠标在一个对象上按下,这个对象预先设定了识别鼠标按下这个事件,就会执行对应的代码。
引擎事件管理器支持鼠标事件、相机事件,场景和物体的事件独立管理。
鼠标事件
Viewer监听事件类型如下:
| 事件名 | 事件说明 | 
|---|---|
| click | 鼠标点击 | 
| dblclick | 鼠标左键双击 | 
| mouseover | 鼠标滑过 | 
| contextmenu | 鼠标右键点击 | 
使用方式如下:
viewer.on("click", (event) => {
    // 获取点击的对象,点击时的位置
    const {object, position} = event;
});
相机事件
相机监听事件如下:
| 事件名 | 事件说明 | 
|---|---|
| dragstart | 拖拽开始 | 
| dragging | 拖拽 | 
| dragend | 拖拽结束 | 
| rotatestart | 相机旋转 | 
| rotate | 相机旋转 | 
| rotateend | 相机旋转 | 
| dolly | 缩放 | 
// 监听拖拽
viewer.cameraControl.addEventListener("dragging", (event) => {
    // 响应代码
});
场景事件
| 事件名 | 事件说明 | 
|---|---|
| loaded | 加载完成 | 
scene.addEventListener("loaded", () => {
    // 响应代码
});
物体事件
物体事件常规响应事件如下,开发人员可自定义事件
| 事件名 | 适用对象 | 说明 | 
|---|---|---|
| added | Thing | 添加到父结点时 | 
| removed | Thing | 从父节点删除时 | 
| loaded | Model、ImagePlane | 远程资源加载完成 | 
var model = new VT.Model({
    modelType: "gltf",
    src: "./resources/scene/models/test/1.gltf"
});
// 事件监听
model.addEventListener("loaded", () => {
    // 响应代码
});
键盘事件
引擎内置了hotkeys-js,如果需要监听键盘事件,可使用VT.hotkeys调用相关方法,详细文档见https://www.npmjs.com/package/hotkeys-js
// 监听键盘F5按键
VT.hotkeys('f5', function(event, handler){
  // Prevent the default refresh event under WINDOWS system
  event.preventDefault()
  alert(' pressed F5!')
});
自定义事件
Viewer和所有物体均继承自事件基类BaseEvent,可直接调用事件派发方法dispatch触发事件,见下:
// 监听事件
viewer.addEventListener("customEventName");
// 触发事件
viewer.dispatch({type: "customEventName"});