当前位置: 首页 > news >正文

vue3 腾讯地图 InfoWindow 弹框

1、vue项目index.html引入地图js

2、页面使用

<script setup lang="ts">
import { useMapStore } from '/@/store';defineOptions({ name: 'PageMap' });
const emits = defineEmits(['update:area', 'update:address', 'update:latitude', 'update:longitude']);
const props = defineProps({area: { type: Array, default: () => [] },address: { type: String, default: '' },latitude: { type: [String, Number], default: '' },longitude: { type: [String, Number], default: '' },
});
const useMap = useMapStore();
const { location } = storeToRefs(useMap);
const position = new TMap.LatLng(location.value.lat, location.value.lng);
const initMap = async () => {// const TMap = (window as any).TMap;window.map = null;window.markerLayer = null;window.infoWindow = null;const center = new TMap.LatLng(location.value.lat, location.value.lng); //定义map变量,调用 TMap.Map() 构造函数创建地图const dom = document.getElementById('ref_map');window.map = new TMap.Map(dom, {center, //设置地图中心点坐标zoom: 16, //设置地图缩放级别rotation: 45, //设置地图旋转角度});window.infoWindow = new TMap.InfoWindow({map: window.map,position,offset: { x: 0, y: -40 }, //设置信息窗相对position偏移像素,为了使其显示在Marker的上方content:'<div class="map el-popper is-light el-popover el-popover--plain" style="z-index: 2070; position: absolute; padding: 0">\n' +'\t\t\t<div class="font-bold p-2 border-b">测试标题</div>\n' +'\t\t\t<div class="pl-3 pr-3 pb-4 pt-2 text-sm">\n' +'\t\t\t\t<div><span>联系人:</span><span>张三</span></div>\n' +'\t\t\t\t<div><span>电话:</span><span>187****2342</span></div>\n' +'\t\t\t</div>\n' +'\t\t\t<span class="el-popper__arrow" style="position: absolute; left: calc(50% - 5px); bottom: -5px"></span>\n' +'\t\t</div>',enableCustom: true,});window.infoWindow.close();updateLayer(position);
};
// 更新定位点
const updateLayer = (position: any) => {const layer = {id: '4',position,styleId: 'myStyle',properties: {//自定义属性title: 'marker1',},};if (window.markerLayer != null) window.markerLayer.updateGeometries([layer]);else {window.markerLayer = new TMap.MultiMarker({map: window.map,geometries: [layer],styles: {//创建一个styleId为"myStyle"的样式(styles的子属性名即为styleId)myStyle: new TMap.MarkerStyle({width: 50, // 点标记样式宽度(像素)height: 50, // 点标记样式高度(像素)src: '/images/emergency-location.png', //图片路径//焦点在图片中的像素位置,一般大头针类似形式的图片以针尖位置做为焦点,圆形点以圆心位置为焦点anchor: { x: 25, y: 32 },enableRelativeScale: true, // 是否开启相对缩放relativeScaleOptions: {scaleZoom: 15, // 设置marker图片宽高像素单位与zoom级别的瓦片像素相同的层级 如当设置为18时,zoom小于18marker会被缩小直至达到minScale设置的最小缩放倍数,大于时marker直至达到maxScale设置的最大缩放倍数;enableRelativeScale为true时生效,默认18minScale: 0.2, // 设置marker最小缩放倍数,enableRelativeScale为true时生效,默认0.5maxScale: 1, // 设置marker最大缩放倍数,enableRelativeScale为true时生效,默认1},}),},});window.markerLayer.on('click', clickMarkerHandler);}
};
const clickMarkerHandler = (evt) => {console.log(evt);window.infoWindow.open(); //打开信息窗window.infoWindow.setPosition(evt.geometry.position); //设置信息窗位置// window.infoWindow.setContent(evt.geometry.position.toString()); //设置信息窗内容
};
onUnmounted(() => {window.markerLayer?.off('click', clickMarkerHandler);// window.map.
});
onMounted(() => {nextTick(() => {setTimeout(() => initMap(), 500);});
});
</script><template><div class="p-4 h-full w-full flex"><div id="ref_map" ref="refMap" style="height: 99%; width: 100%" /></div>
</template>
<style>
.map.el-popper.is-light > .el-popper__arrow:before {border: 0 !important;
}
</style>

3、实际效果, 弹框样式直接使用element的

http://www.lryc.cn/news/468573.html

相关文章:

  • 【Linux】解锁进程间通信奥秘,高效资源共享的实战技巧
  • O1 Nano:OpenAI O1模型系列的简化开源版本
  • 浅谈人工智能之Llama3微调后使用cmmlu评估
  • 为什么需要MQ?MQ具有哪些作用?你用过哪些MQ产品?请结合过往的项目经验谈谈具体是怎么用的?
  • Flutter项目打包ios, Xcode 发布报错 Module‘flutter barcode_scanner‘not found
  • RWSENodeEncoder, KER_DIM_PE(lrgb文件中的encoders文件中的kernel.py)
  • 技术文档:基于微信朋友圈的自动点赞工具开发
  • kubernetes_pods资源清单及常用命令
  • 科目二侧方位停车全流程
  • 2024源鲁杯CTF网络安全技能大赛题解-Round2
  • 10.24学习
  • 社交媒体与客户服务:新时代的沟通桥梁
  • 设置虚拟机与windows间的共享文件夹
  • 微信小程序性能优化 ==== 合理使用 setData 纯数据字段
  • 【加密系统】华企盾DSC服务台提示:请升级服务器,否则可能导致客户端退回到旧服务器的版本
  • 直连南非,服务全球,司库直联再进一步
  • 【spring】从spring是如何避免并发下获取不完整的bean引发的思考 什么是双重检查锁 什么是java内存模型
  • 【计算机网络一】网络学习前置知识
  • nuScenes数据集使用的相机的外参和内参
  • 数据结构与算法:贪心算法与应用场景
  • 音频编解码器音频文件格式
  • FreeSWITCH JSON API
  • 学习docker第三弹------Docker镜像以及推送拉取镜像到阿里云公有仓库和私有仓库
  • 一文掌握Kubernates核心组件,构建智能容器管理集群
  • 正则表达式快速入门
  • 【小程序】-基础语法(二)
  • js 填充数组
  • AI创作3款软件分享,助力内容创作者高效产出优质作品
  • A survey of loss functions for semantic segmentation——论文笔记
  • docker部署es与kibana Mac