跳至主要內容

事件

大约 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", () => {
    // 响应代码
});

物体事件

物体事件常规响应事件如下,开发人员可自定义事件

事件名适用对象说明
addedThing添加到父结点时
removedThing从父节点删除时
loadedModel、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-jsopen in new window

// 监听键盘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"});

上次编辑于:
贡献者: dashun