跳至内容

useCesiumEventListener

以响应式方式订阅 Cesium.Event 实例上的事件:依赖数据变化(如 viewer 重建)时自动重新订阅,组件卸载时自动销毁监听。适合订阅 camera.moveStartscene.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/sharedthrottle 函数或 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;