uni-app使用ucharts地图,自定义Tooltip鼠标悬浮显示内容并且根据@getIndex点击事件获取点击的地区下标和地区名

项目场景:

uni-app使用ucharts地图,自定义Tooltip鼠标悬浮显示内容并且根据@getIndex点击事件获取点击的地区下标和地区名

例如:


问题描述

官方给的文档有限,需要自己下载地图json数据然后自己渲染和编写鼠标悬浮显示内容以及获取点击地址名称,官方只给了@getIndex事件获取下标

官方地址:https://www.ucharts.cn/v2/#/guide/index


解决方案:

第一步引用:

既然用的uniapp,那么在插件市场直接下载导入ucharts组件

地址:https://ext.dcloud.net.cn/plugin?id=271

第二步使用:

c 复制代码
<view class="charts-box" style="height: 520px;padding-top: 30px;">
	<qiun-data-charts type="map" tooltipFormat="tooltipFun" canvasId="mapma"
		:opts="{extra:{map:{mercator:true,fillOpacity:1,TextColor:'#000'}}}"
			:chartData="chartsDataMap" @getIndex="getIndex" />
</view>

tooltipFormat是悬浮提示显示内容
getIndex是点击事件

在script 里引入

c 复制代码
import mapdata from '@/mockdata/mapdata.json'   //这是组件里给的地图数据
import uCharts from '@/uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js' //在uniapp 插件库下载下来就是这个路径 可以自己改

data数据里写入

c 复制代码
//地图数据
				chartsDataMap: {
					series: []
				},
				// 覆盖的是 option
				config: {
					extra: {
						map: {
							mercator: true
						}
					}
				},

created里写入

c 复制代码
created() {
			uCharts.map = {
				"type": "map",
				"canvasId": "",
				"canvas2d": false,
				"background": "none",
				"animation": true,
				"timing": "easeOut",
				"duration": 1000,
				// "color": ['#ff4455'],
				"padding": [
					0,
					0,
					0,
					0
				],
				"fontSize": 8,
				"rotate": false,
				"errorReload": true,
				"fontSize": 8,
				"fontColor": "#666666",
				"enableScroll": false,
				"touchMoveLimit": 60,
				"enableMarkLine": false,
				"dataLabel": true,
				"dataPointShape": true,
				"dataPointShapeType": "solid",
				"tapLegend": true,
				"extra": {
					"map": {
						"border": true,
						"mercator": false,
						"borderWidth": 1,
						"borderColor": "#666666",
						"fillOpacity": 0.6,
						"activeBorderColor": "#55aa00",
						// "activeFillColor": "#FF0033", //设置 鼠标 悬停 地图展示的背景颜色
						"activeFillOpacity": 1
					},
					"tooltip": {
						"showBox": true,
						"showArrow": true,
						"showCategory": false,
						"borderWidth": 0,
						"borderRadius": 0,
						"borderColor": "#000000",
						"borderOpacity": 0.7,
						"bgColor": "#000000",
						"bgOpacity": 0.7,
						"gridType": "solid",
						"dashLength": 4,
						"gridColor": "#CCCCCC",
						"fontColor": "#FFFFFF",
						"splitLine": true,
						"horizentalLine": false,
						"xAxisLabel": false,
						"yAxisLabel": false,
						"labelBgColor": "#FFFFFF",
						"labelBgOpacity": 0.7,
						"labelFontColor": "#666666"
					}
				}
			}
			//模拟从服务器获取数据
			this.getServerDatas()
			//自定义格式化Tooltip显示内容   悬浮显示的内容   return `${item.name}地区:${item.data.amount}` 这里可以根据后端给的数据取自己需要的字段名称即可
			uCharts.formatter.tooltipFun = (item, category, index, opts) => {
				// console.log(item, index, "=item, category, index, opts=")
				return `${item.name}地区:${item.data.amount}`
			}

		},

methods里写入

c 复制代码
methods: {
			//e.currentIndex是获取的下标名称   e.opts.series[e.currentIndex].data.regionProvince) 是根据下标定位到咱们数据里的下标里的对应地址名称即可,这样就可以直接获取到地址名称了
			getIndex(e) {
				console.log('1111', e.currentIndex,e.opts.series[e.currentIndex].data.regionProvince)
			},
			//地图
			getServerDatas() {
				uni.request({
					url: 'http://192.168.68.6:10896/api/ScreenStatistics/GetTotalDataByProvince', //仅为示例,并非真实接口地址。
					headers: {
						'Content-Type': 'application/json'
					},
					credentials: 'include', // 允许发送和接收 cookie
					success: (res) => {
						// console.log(res.data.data, '1111');
						let mapseries = mapdata.features.map((item) => {
							//根据接口数据查找到当前匹配的数据,我的数据是res.data.data,所以根据这个里面的地址字段名regionProvince 来匹配json数据里的地址名称对应,amount是我要悬浮时显示的数量,可以自己需要啥加啥,看自己需要
							let dataItem = res.data.data.find((x) => x.regionProvince == item
								.properties.name) || {
								amount: 0, //数量
								storeName: item.properties.name, //地区
							}
							//添加到 json data中
							item.data = dataItem
							//设置颜色
							return item
						})
						this.chartsDataMap.series = mapseries
					}
				});
			},
		}

这样就完成了地图里我需要的功能

自定义Tooltip鼠标悬浮显示内容并且根据@getIndex点击事件获取点击的地区下标和地区名

相关推荐
珍宝商店37 分钟前
前端老旧项目全面性能优化指南与面试攻略
前端·面试·性能优化
bitbitDown38 分钟前
四年前端分享给你的高效开发工具库
前端·javascript·vue.js
YAY_tyy38 分钟前
【JavaScript 性能优化实战】第六篇:性能监控与自动化优化
javascript·性能优化·自动化
gnip2 小时前
实现AI对话光标跟随效果
前端·javascript
脑花儿2 小时前
ABAP SMW0下载Excel模板并填充&&剪切板方式粘贴
java·前端·数据库
2501_916007472 小时前
HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包)
android·ios·小程序·https·uni-app·iphone·webview
Q_Q5110082853 小时前
python+django/flask+uniapp基于微信小程序的瑜伽体验课预约系统
spring boot·python·django·flask·uni-app·node.js·php
性野喜悲3 小时前
uniapp+<script setup lang=“ts“>解析后端返回的图片流并将二维码展示在页面中
uni-app
闭着眼睛学算法3 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
烛阴3 小时前
【TS 设计模式完全指南】构建你的专属“通知中心”:深入观察者模式
javascript·设计模式·typescript