useCesiumEventListener
以响应式方式订阅 Cesium.Event 实例上的事件:依赖数据变化(如 viewer 重建)时自动重新订阅,组件卸载时自动销毁监听。适合订阅 camera.moveStart、scene.postRender 等任意事件,也支持一次订阅多个。
Usage
vue
<script setup lang="ts">
import { useCesiumEventListener, useViewer } from 'vesium';
import { ref } from 'vue';
const viewer = useViewer();
const changedSymbol = ref('no change');
useCesiumEventListener(() => viewer.value?.camera.moveStart, () => {
changedSymbol.value = 'moveStart';
});
useCesiumEventListener(() => viewer.value?.camera.moveEnd, () => {
changedSymbol.value = 'moveEnd';
});
</script>
<template>
<div class="p-10px flex flex-col gap-y-10px">
Camera Changed : {{ changedSymbol }}
</div>
</template>ts
import { useCesiumEventListener, useViewer } from 'vesium';
const viewer = useViewer();
// 事件实例可能未就绪或会变化时,传 getter 自动跟随
useCesiumEventListener(() => viewer.value?.camera.moveEnd, () => {
console.log('Camera move end');
});
// 支持数组:一次订阅多个事件
useCesiumEventListener(() => [viewer.value?.scene.preRender, viewer.value?.scene.postRender], () => {});建议
事件常由实时帧渲染触发,可能造成 Vue 响应式无效刷新,监听函数建议节流。可使用 @vesium/shared 的 throttle 函数或 VueUse 的 refThrottled。
配置项
isActive- 是否激活监听,默认true;为false时不注册监听,恢复后自动重新订阅,支持 ref/getter 动态控制。
返回值
- 返回停止函数(
WatchStopHandle):调用即移除当前所有已注册监听;组件卸载时自动调用,无需手动清理。
注意事项
event支持单个或多个(数组)Cesium.Event,每项可为undefined、ref 或 getter,依赖变化后自动重新订阅。
Type Definitions
typescript
import type { Arrayable, FunctionArgs } from '@vueuse/core';
import type { Event } from 'cesium';
import type { MaybeRefOrGetter, WatchStopHandle } from 'vue';
export interface UseCesiumEventListenerOptions {
/**
* Whether to active the event listener.
* @default true
*/
isActive?: MaybeRefOrGetter<boolean>;
}
/**
* Easily use the `addEventListener` in `Cesium.Event` instances,
* when the dependent data changes or the component is unmounted,
* the listener function will automatically reload or destroy.
*
* @param event The Cesium.Event instance
* @param listener The listener function
* @param options additional options
* @returns A function that can be called to remove the event listener
*/
export declare function useCesiumEventListener<FN extends FunctionArgs<any[]>>(event: Arrayable<Event<FN> | undefined> | Arrayable<MaybeRefOrGetter<Event<FN> | undefined>> | MaybeRefOrGetter<Arrayable<Event<FN> | undefined>>, listener: FN, options?: UseCesiumEventListenerOptions): WatchStopHandle;