vue3.0中echarts实现中图地图的省份切换,并解决多次切换后地图卡死的情况

news2025/1/11 21:06:16

一、echarts安装及地图的准备

1、安装echarts

npm install echarts

2、下载china.js等json文件到项目中的文件夹
map的下载地址: 等审核
在这里插入图片描述

二、代码说明

<template>
	<div class="center-body">
		<div class="map" id="map"></div>
		<div class="res-button">
			<button v-if="showButton" @click="reChinaMap()">返回全国</button>
		</div>
	</div>
</template>

<script > 
	import * as echarts from "echarts";
	
	export default {
	name: 'index',
	data() {
		return {
			myChart:null,

			// 省份 
			province: {
				"北京": "beijing",
				"天津": "tianjin",
				"上海": "shanghai",
				"重庆": "chongqing",
				"河北": "hebei",
				"河南": "henan",
				"云南": "yunnan",
				"辽宁": "liaoning",
				"黑龙江": "heilongjiang",
				"湖南": "hunan",
				"安徽": "anhui",
				"山东": "shandong",
				"新疆": "xinjiang",
				"江苏": "jiangsu",
				"浙江": "zhejiang",
				"江西": "jiangxi",
				"湖北": "hubei",
				"广西": "guangxi",
				"甘肃": "gansu",
				"山西": "shanxi",
				"内蒙古": "neimenggu",
				"陕西": "shanxi1",
				"吉林": "jilin",
				"福建": "fujian",
				"贵州": "guizhou",
				"广东": "guangdong",
				"青海": "qinghai",
				"西藏": "xizang",
				"四川": "sichuang",
				"宁夏": "ningxia",
				"海南": "hainan",
				"台湾": "taiwan",
				"香港": "xianggang",
				"澳门": "aomen"
			},
		}
	},
	methods:{
		drawMap(name, json) {
			// 前两部是解决切换卡死的关键
			// 判断地图是否渲染
			let myChart = echarts.getInstanceByDom(document.getElementById("map"))
			// 如果渲染则清空地图 
			if (myChart != null) {
				myChart.dispose()
			}
			// 初始化地图
			myChart = echarts.init(document.getElementById("map"));				
			let size = '95%'
			if (!json) {
				json = require("@/assets/js/map/china.json");
				this.showButton = false
				size = '105%'
			}
			echarts.registerMap(name, json)
			let layoutSize = size
			let option={
				legend: {
					left: '20',
					bottom:'30',
					orient:'vertical',
					textStyle: {
						color: '#c1cadf',
						fontSize: 20
					},
				},
				geo: {
	              map: name,
	              aspectScale: 0.85,
	              layoutCenter: ["50%", "50%"], //地图位置
	              layoutSize: layoutSize,                    
	              // 新版写法 normal
	              itemStyle: {
                  	shadowColor: "#276fce",
	                shadowOffsetX:0,
	                shadowOffsetY:15,
	                opacity:0.5                        
	              },                  
	              // 新版写法 emphasis
	              emphasis: {
	                  itemStyle: {
                      	areaColor: "#276fce",
	                  }
	              },
	              regions:[{
	                  name:'南海诸岛',
	                  itemStyle:{
	                      areaColor: 'rgba(0,10,52,1)',
	                      borderColor: 'rgba(0,10,52,1)',
	                      color:"#009cc9"
	                  },
	                  label:{
	                      show:false,
	                      color:'#ffffff',
	                      fontSize:12,
	                  }
	              }]
	          },
	          series: [
				// 地图
				{
					name: '地图',
					type: "map",
					map: name,
					aspectScale: 0.85,
					layoutCenter: ["50%", "50%"], //地图位置
					layoutSize: layoutSize,
					zoom: 1,
					scaleLimit: {
						min: 1,
						max: 2,
					},
					label:{
						show:true,
						color: "#ffff",
					},               
					// 新版写法 normal
					itemStyle: {
						areaColor: "#0c274b",
						borderColor: "#1cccff",
						borderWidth: 1.5,
					},
					// 新版写法 emphasis
					emphasis: {
						itemStyle: {
								areaColor: "#02102b",
								label: {
										color: "#fff"
								}
						}
					},
					selectedMode: false,
				  },
				],
			}
			myChart.setOption(option,true);
			myChart.on('click', e => {
				if (e.seriesName === "地图") {
					// 
					this.darwProvniceMap(e)
				} 
			}
			window.addEventListener("resize", () => {
				myChart.resize()
			})
			this.myChart = myChart
		},
		// 切换省份
		darwProvniceMap(val) {
			if(this.province[val.name]) {
				let json = require(`@/assets/js/map/province/${this.province[val.name]}.json`)
				this.drawMap(this.province[val.name],json)
				this.showButton = true
			}
		},
		// 返回全国
		reChinaMap() {
			this.drawMap('china')
		},
		
	}
</script>

<style scoped>
	/*提示框容器*/
	.res-button{
	  position: fixed;
	  top: calc(70px);
	  left: calc(22%+10px);;
	  z-index: 999;
	  border-radius: 6px;
	}
</style>

三、运行效果在这里插入图片描述

在这里插入图片描述

本人的经验分享,希望可以帮助到你们,如何不对的地方,可以评论留言,帮我指正一下,如果帮助了你,请给我点个赞吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166880.html

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

相关文章

fork函数详解

文章目录fork函数例子详解工作原理GDB 多进程调试fork函数 fork系统调用用于创建一个新进程&#xff0c;称为子进程&#xff0c;它与进程&#xff08;称为系统调用fork的进程&#xff09;同时运行&#xff0c;此进程称为父进程。创建新的子进程后&#xff0c;两个进程将执行fo…

jvm系列(2)--类加载子系统

目录第2章-类加载子系统内存结构概述简图详细图类加载器子系统类加载器ClassLoader角色类加载过程概述加载阶段链接阶段验证(Verify)准备(Prepare)解析(Resolve)初始化阶段类的初始化时机clinit()1&#xff0c;2&#xff0c;3说明4说明5说明6说明类加载器的分类概述虚拟机自带的…

【web安全】——文件上传的绕过方式

作者名&#xff1a;白昼安全主页面链接&#xff1a; 主页传送门创作初心&#xff1a; 舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右铭…

价值创造链路及经营计划

“价值创造过程最主要的环节是建立链接&#xff0c;北京万柳书院在网上热议&#xff0c;其背后是人与人的大量链接&#xff0c;近期热议的湖南卫视春晚亦如是&#xff0c;这种链接为价值的设计、沟通、传递创造条件&#xff1b;企业以客户为中心设计产品&#xff0c;往大了说是…

C++ string类的初步了解

目录 一. 为什么学习string类&#xff1f; 1.C语言中的字符串 2.string类 二. string类的常用接口说明 1.构造 2.容量 size和length capacity clear empty reserve resize 3.元素访问 operator[] at front、back 4.迭代器 ​编辑begin、end rbegin、rend …

数据结构初阶:排序

本期博客我们来到了初阶数据结构最后一个知识点&#xff1a;排序 排序&#xff0c;我们从小到大就一直在接触&#xff0c;按身高、成绩、学号等等不同的排序我们已经历许多&#xff0c;那么各位是按怎样的方法进行排序的呢&#xff1f; 废话不多说这期博客我们对各种排序方法…

测试开发 | 测试平台开发-前端开发之数据展示与分析

本文节选自霍格沃兹测试学院内部教材测试平台的数据展示与分析&#xff0c;我们主要使用开源工具ECharts来进行数据的展示与分析。ECharts简介与安装ECharts是一款基于JavaScript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化…

Unity 使用OpenXR和XR Interaction Toolkit 开发 HTCVive(Vive Cosmos)

Unity 使用OpenXR和XR Interaction Toolkit 开发 HTCVive&#xff08;Vive Cosmos&#xff09; 提示&#xff1a;作者是 Unity 2020.3 以上版本做的开发。开发VR程序需要安装 Steam&#xff0c;SteamVR, (Vive Cosmos,需要再安装VIVEPORT,VIVEConsole) OpenXR 控制设备 &#x…

OpenCV(12)-OpenCV的机器学习

OpenCV的机器学习 基本概念 计算机视觉是机器学习的一种应用&#xff0c;而且是最有价的应用 人脸识别 哈尔(Haar)级联方法深度学习方法(DNN) Haar人脸识别方法 哈尔(Haar)级联方法是专门为解决人脸识别而推出的&#xff0c;在深度学习还不流行时&#xff0c;哈尔已可以商…

Android 深入系统完全讲解(21)

关键性 EGLSurface 代码位置 继续再看看&#xff0c;代码跑到 C 里面去了。 然后关键点&#xff1a; 获取本地窗口&#xff0c;创建 Surface&#xff0c;然后 toEGLHandle 进行包裹&#xff0c;变成 EGL 上下文。 EGLSurface 。 绘制的设计本质逻辑 在这里就回归一点&#xff…

Unity学习笔记--File.ReadAllLines和File.ReadAllText的使用以及注意事项(一定要看到最后!!!)

目录前言一、File.ReadAllLines参数返回例子二、File.ReadAllText参数返回例子注意事项可能出现的问题总结前言 最近在做文件存储以及读取的时候&#xff0c;需要用到C#给我们提供的类&#xff1a;File 具体使用方法可以看官方文档&#xff1a;C# File 类 这篇文章只会说File.…

深度学习基础理念(一)

文章目录1. 机器学习 Machine Learing机器学习类别2. 机器如何找函数深度学习输入类型和输出类型机器如何找函数的1. 机器学习 Machine Learing 什么是机器学习&#xff0c;顾名思义 机器 拥有会学习的能力&#xff0c;机器学习就是让机器具备能够找函数的能力 机器学习就是找…

【C语言课程设计】通讯录(1.0版本)

前言 相信各位对于通讯录都不是很陌生吧。通讯录我们在学校的大作业&#xff0c;课程设计经常会去使用它。那么今天我们将使用C语言来实现一个简单的通讯录。 目录 前言 一、通讯录的需求 二、工程文件的创建 三、通讯录的声明和定义 四、通讯录各函数的声明和定义 五、通…

Mysql入门技能树-数据查询-练习篇

SELECT 下列 SQL 语句&#xff0c;哪一项不合法&#xff1f; 答案是&#xff1a;C select now(),3.14 now() |3.14| ----------------------- 2023-01-16 16:47:04|3.14|MySQL查询表中所有的数据可以通过“SELECT * 通配符”或者“SELECT 所有字段”实现。 SE…

hadoop3.x源码编译及cmake的问题解决:CMake failed with error code 1

一、准备工作 基础环境&#xff1a;centos7 &#xff08;1&#xff09;官方源码中编译之前对基础环境及版本的要求&#xff08;重点是红色部分&#xff09; Requirements: * Unix System* JDK 1.8 * Maven 3.3 or later * ProtocolBuffer 2.5.0 * CMake 3.1 or newer (if com…

OSCP-Vulnhub靶机记录-Hacker_Kid-v1.0.1

Vulnhub靶机记录-Hacker_Kid-v1.0.1介绍&安装信息收集页面源代码DIG信息收集xxe漏洞探测9999端口SSTI模板注入发现具有Capabilities特殊操作权限的程序原理介绍&安装 靶机名称&#xff1a;Hacker_Kid-v1.0.1 靶机难度&#xff1a;中等 虚拟机环境&#xff1a;此靶机推…

【Linux】线程互斥

目录&#x1f308;前言&#x1f338;1、Linux线程互斥&#x1f367;1.1、线程间互斥相关背景概念&#x1f368;1.2、互斥量(锁)相关背景&#x1f36f;1.3、互斥量(锁)相关API&#x1f36f;1.3.1、初始化和销毁互斥锁&#x1f370;1.3.2、互斥量加锁和解锁&#x1f372;1.3.3、互…

Python爬虫403错误的解决方案

前言程序使用一段时间后会遇到HTTP Error 403: Forbidden错误。 因为在短时间内直接使用Get获取大量数据&#xff0c;会被服务器认为在对它进行攻击&#xff0c;所以拒绝我们的请求&#xff0c;自动把电脑IP封了。 解决这个问题有两种方法。一是将请求加以包装&#xff0c;变成…

1.浮动float

提示&#xff1a;如果多一个盒子&#xff08;都设置浮动&#xff0c;则它们会按照属性值一行内显示并且顶端对齐排列&#xff09; 注意&#xff1a; 浮动的元素是互相贴靠在一起的&#xff0c;&#xff08;没有缝隙&#xff09;&#xff0c;如果父级宽度装下这些浮动盒子&#…

MyBatis 详解 (2) -- 增删改操作

MyBatis 详解 2 -- 增删改操作前言一、准备工作1.1 创建数据库和表1.2 添加实体类1.3 添加 mapper 接口 (数据持久层)1.4 创建与接口对应的 xml 文件二、增加操作2.1 默认返回受影响的行数2.2 特殊的新增&#xff1a;返回自增 id三、删除操作四、修改操作五、实现完整交互5.1 添…