UNPKG

@vuemap/vue-amap-extra

Version:

@vuemap/vue-amap扩展库,包含threejs相关图层

1 lines 10.2 kB
{"version":3,"file":"ThreeGltf.vue2.mjs","sources":["../../../../packages/ThreeGltf/ThreeGltf.vue"],"sourcesContent":["<template>\r\n <div style=\"display: none\">\r\n <div\r\n ref=\"popupRef\"\r\n style=\"width: 0; height: 0; position: relative\"\r\n >\r\n <div\r\n class=\"content-container\"\r\n style=\"transform: translate(-50%, -100%); position: absolute\"\r\n >\r\n <slot />\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n<script setup lang=\"ts\">\r\nimport { defineOptions, getCurrentInstance, ref, watch } from \"vue\";\r\nimport { useRegister, buildProps } from \"@vuemap/vue-amap\";\r\nimport { CSS2DObject } from \"../ThreeLayer/CSS2DRenderer\";\r\nimport { CSS3DObject } from \"../ThreeLayer/CSS3DRenderer\";\r\nimport CustomThreeGltf from \"./CustomThreeGltf\";\r\nimport type { MoveAnimation, Vec, ConfigLoader } from \"./Type\";\r\nimport type { PropType } from \"vue\";\r\nconst popupRef = ref<HTMLDivElement>();\r\n\r\ndefineOptions({\r\n name: \"ElAmapThreeGltf\",\r\n inheritAttrs: false,\r\n});\r\n\r\nconst props = defineProps(\r\n buildProps({\r\n url: {\r\n type: String,\r\n },\r\n position: {\r\n type: Array as PropType<number[]>,\r\n },\r\n height: {\r\n type: Number,\r\n default: 0,\r\n },\r\n rotation: {\r\n type: Object as PropType<Vec>,\r\n },\r\n scale: {\r\n type: [Number, Array],\r\n default: 1,\r\n },\r\n angle: {\r\n type: Number,\r\n default: 0,\r\n },\r\n moveAnimation: {\r\n type: Object as PropType<MoveAnimation>,\r\n }, //位置移动是否开启动画\r\n configLoader: {\r\n type: Function as PropType<ConfigLoader>,\r\n },\r\n useModelCache: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showPopup: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n popupHeight: {\r\n //弹窗距离模型中心点的高度\r\n type: Number,\r\n default: 0,\r\n },\r\n popupScale: {\r\n //三维弹窗的缩放比例(只有在popupType为3D时生效)\r\n type: [Number, Array<number>],\r\n default: 1,\r\n },\r\n popupType:{//信息弹窗类型\r\n type:String as PropType<'2D'|'3D'>,\r\n default:'2D'\r\n }\r\n })\r\n);\r\nconst emits = defineEmits([\r\n \"init\",\r\n \"click\",\r\n \"mousemove\",\r\n \"mouseover\",\r\n \"mouseout\",\r\n]);\r\n\r\nlet $amapComponent: CustomThreeGltf;\r\n\r\nlet popup: CSS2DObject | CSS3DObject;\r\n\r\nconst currentInstance = getCurrentInstance();\r\n\r\nconst { $$getInstance, parentInstance } = useRegister<CustomThreeGltf, any>(\r\n (options, parentComponent) => {\r\n return new Promise<CustomThreeGltf>((resolve) => {\r\n // currentInstance.$$startAnimations = $$startAnimations;\r\n // currentInstance.$$stopAnimations = $$stopAnimations;\r\n // Object.assign( currentInstance.ctx, currentInstance.exposed);\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n // @ts-ignore\r\n $amapComponent = new CustomThreeGltf(\r\n parentComponent,\r\n options,\r\n {\r\n $emit: emits,\r\n ...(currentInstance?.exposed || {}),\r\n },\r\n () => {\r\n addPopup($amapComponent);\r\n resolve($amapComponent);\r\n }\r\n );\r\n });\r\n },\r\n {\r\n emits,\r\n destroyComponent () {\r\n if ($amapComponent && parentInstance?.$amapComponent) {\r\n if (!parentInstance.isDestroy) {\r\n $amapComponent.remove();\r\n }\r\n $amapComponent.layer?.cssRenderer?.domElement?.remove();\r\n $amapComponent.destroy();\r\n $amapComponent = null as any;\r\n }\r\n },\r\n }\r\n);\r\n\r\nconst addPopup = (instance: CustomThreeGltf) => {\r\n const element = popupRef.value as HTMLDivElement;\r\n const contentEle = element.querySelector('.content-container');\r\n if(contentEle?.children?.length==0) return;\r\n if (props.popupType === \"2D\") {\r\n if(!instance?.layer?.css2DRenderer){\r\n return;\r\n }\r\n const css2dObject = new CSS2DObject(element);\r\n css2dObject.center.set(0.5, 1);\r\n css2dObject.translateY(props.popupHeight || 0);\r\n popup = css2dObject;\r\n popup.visible = props.showPopup;\r\n instance.object.add(popup);\r\n } else if (props.popupType === \"3D\") {\r\n if(!instance?.layer?.css3DRenderer){\r\n return;\r\n }\r\n const scales =\r\n typeof props.popupScale === \"number\"\r\n ? [props.popupScale, props.popupScale, props.popupScale]\r\n : props.popupScale;\r\n const css3DObject = new CSS3DObject(element);\r\n css3DObject.translateY(props.popupHeight || 0);\r\n css3DObject.scale.set(scales[0], scales[1], scales[2]);\r\n popup = css3DObject;\r\n popup.visible = props.showPopup;\r\n instance.object.add(popup);\r\n }\r\n instance?.refresh();\r\n};\r\n\r\nconst $$startAnimations = () => {\r\n $amapComponent.startAnimations();\r\n};\r\nconst $$stopAnimations = () => {\r\n $amapComponent.stopAnimations();\r\n};\r\n\r\ndefineExpose({\r\n $$getInstance,\r\n $$startAnimations,\r\n $$stopAnimations,\r\n});\r\n\r\nwatch(\r\n () => props.showPopup,\r\n (val) => {\r\n if(val && !popup){\r\n addPopup($amapComponent);\r\n return;\r\n }\r\n if(popup){\r\n popup.visible = val;\r\n $amapComponent.refresh();\r\n }\r\n }\r\n);\r\n\r\nwatch(\r\n () => props.popupHeight,\r\n (val, old) => {\r\n if (popup) {\r\n const changeVal = (val || 0) - (old || 0);\r\n popup.translateY(changeVal || 0);\r\n $amapComponent.refresh();\r\n }\r\n }\r\n);\r\n\r\nwatch(\r\n () => props.popupScale,\r\n (val) => {\r\n if (popup && val) {\r\n const scales = typeof val === \"number\" ? [val, val, val] : val;\r\n popup.scale.set(scales[0], scales[1], scales[2]);\r\n $amapComponent.refresh();\r\n }\r\n }\r\n);\r\n</script>\r\n"],"names":[],"mappings":"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"}