vue3 腾讯地图 InfoWindow 弹框

news2024/10/25 17:32:40

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时生效,默认18
						minScale: 0.2, // 设置marker最小缩放倍数,enableRelativeScale为true时生效,默认0.5
						maxScale: 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.coloradmin.cn/o/2223439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】SpringBoot实现MySQL数据库的增删查改

目录 1. 项目介绍 2. 相关代码 2.1 项目配置 2.2 SQL语句 2.3 数据访问层 2.4 业务逻辑层 2.5 Web表现层 3. 结果展示 4. 源码获取 1. 项目介绍 SpringBoot是一个轻量级框架&#xff0c;简化了Spring应用的开发和配置。相比较SSM框架&#xff0c;极大的简化了SSM中XM…

Android Navigation传递复杂参数(自定义)

打开要添加参数的navigation文件 使用Design视图 点击右侧Arguments的添加("")按钮 根据自定义类所继承的序列化接口选择这两项其中的一个 选择或者在搜索框检索你的类&#xff0c;然后点击OK&#xff0c;回到前一界面点击ADD即可 其他的操作就跟基本类型用法一样了

C++中指针类型、引用类型、值类型

定义&#xff1a; 1. 带 * 的声明&#xff1a;指针类型 声明方式&#xff1a;MyClass* obj; 是一个 指针类型&#xff0c;表示 obj 是一个指针&#xff0c;可以指向 MyClass 类型的对象。 指针特点&#xff1a; 指针存储的是对象的地址&#xff0c;可以为空&#xff08;null…

新的Midjourney就是一个增强版的Photoshop,你现在可以轻松的用它换衣服、换发型了

好久没有聊 Midjourney 了&#xff0c;昨晚他们发布了一项引人注目的新功能&#xff1a;AI 图像编辑&#xff0c;一个基于网页的加强版的 Photoshop 呼之欲出&#xff0c;让我大为震撼&#xff0c;也让用户们赞叹不已。 基于现有图像进行参考&#xff0c;进而生成新的图片&…

谈一谈 Netty 的内存管理 —— 且看 Netty 如何实现 Java 版的 Jemalloc

本文基于 Netty 4.1.112.Final 版本进行讨论 在之前的 Netty 系列中&#xff0c;笔者是以 4.1.56.Final 版本为基础和大家讨论的&#xff0c;那么从本文开始&#xff0c;笔者将用最新版本 4.1.112.Final 对 Netty 的相关设计展开解析&#xff0c;之所以这么做的原因是 Netty 的…

学习--四元数介绍

2022年的草稿箱里的一篇 四元数由William Rowan Hamilton发现 定义与复数类似&#xff0c;有三个虚部 q a b i c j d k qabicjdk qabicjdk 其中 i 2 j 2 k 2 i j k − 1 i^2j^2k^2ijk-1 i2j2k2ijk−1 四元数的模长&#xff1a; 四维的长度 加减法&#xff1a; 对应分…

十年编程路,一生踏征途

时光荏苒流逝&#xff0c;白驹匆匆过隙&#xff0c;不知不觉间&#xff0c;我已经在程序开发这条道路上走过了整整十年。从最初的求学&#xff0c;到如今成为一名较为资深的职业开发者&#xff0c;这一路充满了挑战、学习、成长与感动。在这1024程序员节的特殊时刻&#xff0c;…

信息安全工程师(69)数字水印技术与应用

前言 数字水印技术是一种在数字媒体中嵌入特定信息的技术&#xff0c;这些信息可以是版权信息、元数据等。 一、数字水印技术的定义与原理 数字水印技术&#xff08;Digital Watermarking&#xff09;是将一些标识信息&#xff08;即数字水印&#xff09;直接嵌入数字载体&…

发布者Publisher、订阅者Subscriber的编程实现+自定义话题消息编程实现

1.发布者Publisher的编程实现 1.创建功能包 cd ~/catkin_ws/src catkin_create_pkg learning_topic rospy roscpp std_msgs geometry_msgs turtlesim 2.创建发布者代码&#xff08;C&#xff09; ——文件名为velocity_publisher.cp /*************************************…

【Vue】word / excel / ppt / pdf / 视频(mp4,mov) 预览

文件预览 Vue3一. word二. excel三. ppt四. pdf4.1 vue-pdf-embed4.2 iframe 五. 视频六&#xff1a;扩展——kkFileView Vue3 一. word 安装&#xff1a;npm install docx-preview父页面 <template><div><DocPreviewv-if"filePath.includes(docx)"…

E. Sakurako, Kosuke, and the Permutation (置换环) Codeforces Round 981 (Div. 3)

哈哈哈, 之前做过一道置换环的题目, 但是当时不知道这是置换环 昨天写这道题目时老眼昏花, 读错题目, 如今一朝有悟,甄至化境 原题 E. Sakurako, Kosuke, and the Permutation 思路 这道题目与排序的不同在于, 如果第 i 个数不等于 i, 但是第 i 个数指向的数等于 i, 那么也…

基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)

目录 1. 延迟关闭订单 1.1 订单延时关闭功能技术选型 1.1.1 定时任务 1.1.2 RabbitMQ 1.1.3 Redis 过期监听 1.1.4 Redisson 1.1.5 RocketMQ 1.2 RocketMQ订单延时关闭发送方实现 1.3 RocketMQ订单延时关闭的消费方实现 1. 延迟关闭订单 用户发起订单后&#xff0c;如…

基于SSM的BBS社区论坛系统源码

运行环境&#xff1a;ideamysql5.7jdk8maven 使用技术&#xff1a;ssmmysqlshirolayui 功能模块&#xff1a;用户管理、模板管理、帖子管理、公告管理、权限管理等

使用 v-html 指令渲染的标签, 标签内绑定的 click 事件不生效

背景 在项目开发中&#xff0c;实现用户友好的输入交互是提升用户体验的关键之一。例如&#xff0c;在客服对话框中&#xff0c;其中有包含多个快捷选项用于快速问答&#xff0c;每个快捷选项都是一个可点击的按钮&#xff0c;并需要绑定点击事件来执行相应操作。然而&#xf…

Android Junit 单元测试 | 依赖配置和编译报错解决

问题 为什么在依赖中添加了testImplement在build APK的时候还是会报错&#xff1f;是因为没有识别到test文件夹是test源代码路径吗&#xff1f; 最常见的配置有: implementation - 所有源代码集(包括test源代码集)中都有该依赖库.testImplementation - 依赖关系仅在test源代码…

【CSS in Depth 2 精译_054】8.2 CSS 层叠图层(cascade layer)的推荐组织方案

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第三部分 现代 CSS 代码组织】 ✔️【第八章 层叠图层及其嵌套】 ✔️ 8.1 用 layer 图层来操控层叠规则&#xff08;上篇&#xff09; 8.1.1 图层的定义&#xff08;上篇&#xff09;8.1.2 图层的…

华为云实战杂记

配置nginx服务器 首先我们拿到一台服务器时&#xff0c;并不知道系统是否存在Nginx我们可以在Linux命令行执行如下命令查看 find / -name nginx* find / -name nginx* 查找所有名字以nginx开头的文件或者目录&#xff0c;我们看看系统里面都有哪些文件先&#xff0c;这样可以快…

Linux系统安装Redis详细操作步骤(二进制发布包安装方式)

安装方式介绍 在Linux系统中&#xff0c;安装软件的方式主要有四种&#xff0c;这四种安装方式的特点如下&#xff1a; 安装方式特点二进制发布包安装软件已经针对具体平台编译打包发布&#xff0c;只要解压&#xff0c;修改配置即可rpm安装软件已经按照redhat的包管理规范进…

雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的

如果域名处填写的分别为 IP 与域名&#xff0c;那么当使用进行 IP 请求时&#xff0c;则将会命中第一个配置的站点 以上图为例&#xff0c;如果用户使用 IP 访问&#xff0c;命中 example.com。 如果域名处填写的分别为域名与泛域名&#xff0c;除非准确命中域名&#xff0c;否…

NGINX 保护 Web 应用安全之基于 IP 地址的访问

根据客户端的 IP 地址控制访问 使用 HTTP 或 stream 访问模块控制对受保护资源的访问&#xff1a; location /admin/ { deny 10.0.0.1; allow 10.0.0.0/20; allow 2001:0db8::/32; deny all; } } 给定的 location 代码块允许来自 10.0.0.0/20 中的任何 IPv4 地址访问&#xf…