UNPKG

vue-cesium

Version:
1 lines 13 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/overlays/html/index.ts"],"sourcesContent":["import type { CSSProperties, TeleportProps, PropType, WatchStopHandle, VNode } from 'vue'\nimport { defineComponent, getCurrentInstance, ref, h, reactive, createCommentVNode, watch, onUnmounted } from 'vue'\nimport type { VcCartesian2, VcComponentInternalInstance, VcComponentPublicInstance, VcPosition, VcReadyObject } from '@vue-cesium/utils/types'\nimport { $ } from '@vue-cesium/utils/private/vm'\nimport { useCommon } from '@vue-cesium/composables'\nimport { hSlot } from '@vue-cesium/utils/private/render'\nimport { position, pixelOffset, show } from '@vue-cesium/utils/cesium-props'\nimport { makeCartesian2, makeCartesian3 } from '@vue-cesium/utils/cesium-helpers'\nimport usePortal from '@vue-cesium/composables/private/use-portal'\nimport { commonEmits } from '@vue-cesium/utils/emits'\n\nexport const htmlOverlayProps = {\n ...position,\n ...pixelOffset,\n ...show,\n autoHidden: {\n type: Boolean,\n default: true\n },\n customClass: String,\n teleport: Object as PropType<TeleportProps>\n}\nconst emits = {\n ...commonEmits,\n mouseenter: (evt: MouseEvent) => true,\n mouseleave: (evt: MouseEvent) => true,\n click: (evt: MouseEvent) => true\n}\nexport default defineComponent({\n name: 'VcOverlayHtml',\n props: htmlOverlayProps,\n emits: emits,\n setup(props: VcOverlayHtmlProps, ctx) {\n // state\n const instance = getCurrentInstance() as VcComponentInternalInstance\n instance.cesiumClass = 'VcOverlayHtml'\n instance.cesiumEvents = []\n const commonState = useCommon(props, ctx, instance)\n if (commonState === void 0) {\n return\n }\n const { $services } = commonState\n const canRender = ref(false)\n const rootRef = ref<HTMLElement>(null)\n const rootStyle = reactive<CSSProperties>({})\n const offset = ref<Cesium.Cartesian2>(null)\n const position = ref<Cesium.Cartesian3>(null)\n const lastCanvasPosition = ref<Cesium.Cartesian2>(null)\n\n // watcch\n let unwatchFns: Array<WatchStopHandle> = []\n unwatchFns.push(\n watch(\n () => props.position,\n val => {\n position.value = makeCartesian3(val as any, $services.viewer.scene.globe.ellipsoid) as Cesium.Cartesian3\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => props.pixelOffset,\n val => {\n offset.value = makeCartesian2(val) as Cesium.Cartesian2\n }\n )\n )\n\n unwatchFns.push(\n watch(\n () => props.show,\n val => {\n rootStyle.display = val ? 'block' : 'none'\n }\n )\n )\n // methods\n instance.createCesiumObject = async () => {\n return $(rootRef)\n }\n instance.mount = async () => {\n const { viewer } = $services\n canRender.value = true\n\n if (props.teleport && props.teleport.to && !props.teleport.disabled) {\n showPortal()\n }\n\n offset.value = makeCartesian2(props.pixelOffset) as Cesium.Cartesian2\n position.value = makeCartesian3(props.position!, viewer.scene.globe.ellipsoid) as Cesium.Cartesian3\n viewer.scene.preRender.addEventListener(onPreRender)\n return true\n }\n instance.unmount = async () => {\n const { viewer } = $services\n viewer.scene.preRender.removeEventListener(onPreRender)\n canRender.value = false\n\n if (props.teleport && props.teleport.to && !props.teleport.disabled) {\n hidePortal()\n }\n\n return true\n }\n const onPreRender = () => {\n const { viewer } = $services\n if (position.value) {\n const canvasPosition = viewer.scene.cartesianToCanvasCoordinates(position.value, {} as any)\n if (Cesium.defined(canvasPosition) && !Cesium.Cartesian2.equals(lastCanvasPosition.value, canvasPosition)) {\n rootStyle.left = canvasPosition.x + offset.value.x + 'px'\n rootStyle.top = canvasPosition.y + offset.value.y + 'px'\n\n if (props.autoHidden && viewer.scene.mode !== Cesium.SceneMode.SCENE2D && viewer.scene.mode !== Cesium.SceneMode.MORPHING) {\n const cameraPosition = viewer.camera.position\n const cartographicPosition = viewer.scene.globe.ellipsoid.cartesianToCartographic(cameraPosition)\n if (Cesium.defined(cartographicPosition)) {\n let cameraHeight = cartographicPosition.height\n cameraHeight += 1 * viewer.scene.globe.ellipsoid.maximumRadius\n if (Cesium.Cartesian3.distance(cameraPosition, position.value) > cameraHeight || !props.show) {\n rootStyle.display = 'none'\n } else {\n rootStyle.display = 'block'\n }\n }\n } else {\n rootStyle.display = 'block'\n }\n } else if (!Cesium.defined(canvasPosition)) {\n rootStyle.display = 'none'\n }\n\n lastCanvasPosition.value = canvasPosition\n }\n }\n\n // life cycle\n onUnmounted(() => {\n unwatchFns.forEach(item => item())\n unwatchFns = []\n })\n\n const renderContent = () => {\n if (canRender.value) {\n return h(\n 'div',\n {\n ref: rootRef,\n class: `vc-html-container${props.customClass ? ' ' + props.customClass : ''}`,\n style: rootStyle,\n onMouseenter: onMouseenter,\n onMouseleave: onMouseleave,\n onClick: onClick\n },\n hSlot(ctx.slots.default)\n )\n } else {\n return createCommentVNode('v-if')\n }\n }\n\n const onClick = evt => {\n ctx.emit('click', evt)\n }\n\n const onMouseenter = evt => {\n ctx.emit('mouseenter', evt)\n }\n\n const onMouseleave = evt => {\n ctx.emit('mouseleave', evt)\n }\n\n const renderPortalContent = () => {\n return renderContent()\n }\n\n const { showPortal, hidePortal, renderPortal } = usePortal(instance, rootRef, renderPortalContent)\n if (props.teleport && props.teleport.to && !props.teleport.disabled) {\n return renderPortal\n } else {\n return () => renderContent()\n }\n }\n})\n\nexport type VcOverlayHtmlEmits = typeof emits\nexport interface VcOverlayHtmlProps {\n /**\n * Specify the geographic location of the HTML element.\n */\n position?: VcPosition\n /**\n * Specify the pixel offset of the HTML.\n */\n pixelOffset?: VcCartesian2\n /**\n * Specify whether to display the HTML overlay.\n * Default value: true\n */\n show?: boolean\n /**\n * Specifies whether HTML is automatically hidden when it is on the back of the earth.\n * Default value: true\n */\n autoHidden?: boolean\n /**\n * Specify an HTML custom class.\n */\n customClass?: string\n /**\n * Specify the teleport props.\n */\n teleport?: TeleportProps\n /**\n * Triggers before the VcOverlayHtml is loaded.\n */\n onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n /**\n * Triggers when the VcOverlayHtml is successfully loaded.\n */\n onReady?: (readyObject: VcReadyObject) => void\n /**\n * Triggers when the component load failed.\n */\n onUnready?: (e: any) => void\n /**\n * Triggers when the VcOverlayHtml is destroyed.\n */\n onDestroyed?: (instance: VcComponentInternalInstance) => void\n}\n\nexport type VcOverlayHtmlRef = VcComponentPublicInstance<VcOverlayHtmlProps>\nexport type VcOverlayHtmlSlots = {\n /**\n * Slot for html element tag.\n */\n default: () => VNode[]\n}\n"],"names":["position"],"mappings":"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"}