事件
大约 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"});