Echarts实现全国地图省份联动效果
效果图:
实现效果:
1、鼠标移入圆点悬浮框显示内容
- 使用tooltip属性,判断圆点位置
2、点击圆点跳转路由
- 使用myCharts.on('click', function (param) {},判断圆点位置实现点击跳转
主要代码:
inde.html
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="libs/jquery.js">script>
<script src="libs/echarts.min.js">script>
<script src='./index.js'>script>
<title>全国地图省份联动效果title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
a {
text-decoration: none;
}
/* .adshou{cursor:pointer !important};*/
.layui-btn .conut-next {
text-align: center;
font-size: 20px;
color: #3E3E3E;
padding: 5px 0;
transition: all 0.5s;
}
.layui-btn:hover .conut-next {
font-size: 18px;
color: red;
}
.close-back {
background: url(img/close_back.png) no-repeat;
display: none;
transition: all 0.5s;
height: 70px;
width: 85px;
color: #fff;
left: 65px;
position: absolute;
top: 300px;
cursor: pointer;
}
.close-back img {
margin: 28px auto 0;
width: 30px;
display: block;
transition: all 0.5s;
}
.close-back:hover {
left: 55px;
}
.close-back:hover img {
width: 22px;
margin-top: 32px;
}
.imgSize {
height: 170px;
width: 260px;
}
#cityMap{
background: #02060E;
}
style>
head>
<body>
<div id="cityMap" style="width: 100%;height:98vh;">div>
<div class="close-back"><img src="img/back_button.png" />div>
body>
html>
index.js
$(function(){ var provinces = ['shanghai', 'hebei','shanxi','neimenggu','liaoning','jilin','heilongjiang','jiangsu','zhejiang','anhui','fujian','jiangxi','shandong','henan','hubei','hunan','guangdong','guangxi','hainan','sichuan','guizhou','yunnan','xizang','shanxi1','gansu','qinghai','ningxia','xinjiang', 'beijing', 'tianjin', 'chongqing', 'xianggang', 'aomen', 'taiwan']; var provincesText = ['上海', '河北', '山西', '内蒙古', '辽宁', '吉林','黑龙江', '江苏', '浙江', '安徽', '福建', '江西', '山东','河南', '湖北', '湖南', '广东', '广西', '海南', '四川', '贵州', '云南', '西藏', '陕西', '甘肃', '青海', '宁夏', '新疆', '北京', '天津', '重庆', '香港', '澳门', '台湾']; var selected = 'china'; var myChartsName = '全国园区总数:1288'; mapEcharts(selected); //返回中国地图 $('.close-back').click(function(e){ $('.close-back').hide(); myChartsName = '全国园区总数:1288'; mapEcharts(selected); }); myCharts.on('click', function (param) { console.log(param); //遍历取到provincesText 中的下标 去拿到对应的省js event.stopPropagation(); //点击亮点打开新页面 for(var i= 0 ; i < provinces.length ; i++ ){ if(param.data && param.data.areaname == provinces[i]){ window.open(param.data.url) // 打开新页面 } } //点击跳转到省 for(var i= 0 ; i < provincesText.length ; i++ ){ if(param.name == provincesText[i]){ //显示对应省份的方法 console.log(222); $('.close-back').show(); myChartsName = '全省园区总数:288'; mapEcharts(provinces[i]); break ; } } }); function mapEcharts(name) { var url = ''; name == 'china' ? url = './libs/json/' + name + '.json' : url = './libs/json/province/' + name + '.json' myCharts = echarts.init(document.getElementById('cityMap')); $.ajaxSettings.async = false; $.get(url,function(data){ var dataMap = data; echarts.registerMap(name, dataMap); myCharts.hideLoading(); // 散点坐标 var geoCoordMap = [ {name: '湖北', value: [113.52, 30.179], size: 30, url:'https://www.baidu.com/',symbol: 'image://img/point.png',img:'img/demo.jpg',areaname:'hubei'}, {name: '四川', value: [103.42, 32.279], size: 50, url:'https://www.baidu.com/',symbol: 'image://img/point1.png',img:'img/demo.jpg',areaname:'sichuan'}, {name: '青海', value: [98.32, 34.379], size: 30,url:'https://www.baidu.com/',symbol: 'image://img/point.png',img:'img/demo.jpg',areaname:'qinghai'}, {name: '广西', value: [108.22, 23.479], size: 30,url:'https://www.baidu.com/',symbol: 'image://img/point.png',img:'img/demo.jpg',areaname:'guangxi'}, {name: '河北', value: [118.12, 40.579], size: 50,url:'https://www.baidu.com/',symbol: 'image://img/point1.png',img:'img/demo.jpg',areaname:'hebei'}, {name: '广东1', value: [113.62, 23.179], size: 50,url:'https://www.baidu.com/',symbol: 'image://img/point1.png',img:'img/demo.jpg',areaname:'guangdong'}, {name: '广东2', value: [114.62, 23.179], size: 30,url:'https://www.baidu.com/',symbol: 'image://img/point.png',img:'img/demo.jpg',areaname:'guangdong'}, {name: '北京', value: [116.41, 39.917], size: 50,url:'https://www.baidu.com/',symbol: 'image://img/point1.png',img:'img/demo.jpg',areaname:'beijing'}, {name: '河南', value: [113.56, 34.657], size: 50,url:'https://www.baidu.com/',symbol: 'image://img/point1.png',img:'img/demo.jpg',areaname:'henan'}, {name: '新疆1235', value: [87.81, 43.492], size: 30,url:'https://www.baidu.com/',symbol: 'image://img/point.png',img:'img/demo.jpg',areaname:'xinjiang'}, {name: '西藏333', value: [91.13, 29.660], size: 30,url:'https://www.baidu.com/',symbol: 'image://img/point.png',img:'img/demo.jpg',areaname:'xizang'}, {name: '黑龙江', value: [127.84, 45.756], size: 30,url:'https://www.baidu.com/',symbol: 'image://img/point.png',img:'img/demo.jpg',areaname:'heilongjiang'}, ]; var convertData2 = function (data) { // 处理数据函数 var res = []; for (var i = 0; i < data.length; i++) { var geoCoord = data[i].value; console.log(geoCoord); var geoAreaname = data[i].areaname; if ((geoCoord && name==geoAreaname)) { //跳转到省级图标需放大 res.push({ name: data[i].name, value: geoCoord.concat(data[i].size * 101), url:data[i].url, symbol:data[i].symbol, img:data[i].img, areaname:data[i].areaname }); } if(name == 'china'){ //在中国地图上图标显示同value res.push({ name: data[i].name, value: geoCoord.concat(data[i].size), url:data[i].url, symbol:data[i].symbol, img:data[i].img, areaname:data[i].areaname }); } } return res; }; myCharts.setOption(option = { title: { text: myChartsName, left: 'center', padding: 50, textStyle: { //主标题文本样式 color: "#fff", fontSize: 32, }, }, tooltip: { trigger: 'item', show: true, formatter:function(params){ //定义一个res变量来保存最终返回的字符结果,并且先把地区名称放到里面 var res='' for(var i= 0 ; i < provinces.length ; i++ ){ if(params.data && params.data.areaname == provinces[i]){ res = params.data.name //悬浮框显示内容 } } return res; }, }, geo: { // 地图配置 show: true, map: name, label: { normal: { show: true }, emphasis: { show: true } }, roam: false,//控制缩放 itemStyle: { normal: { areaColor: "#6cf", shadowBlur: 1, shadowColor: "#333", shadowOffsetX: 10, shadowOffsetY: 10, }, emphasis: { label: { show: true, //选中状态是否显示省份名称 }, areaColor: "#fff", shadowOffsetX: 10, shadowOffsetY: 10, shadowBlur: 5, borderWidth: 10, shadowColor: "rgba(0, 0, 0, 0.1)" } }, regions: [ { name: "南海诸岛", itemStyle: { // 隐藏地图 normal: { opacity: 0, // 为 0 时不绘制该图形 } }, emphasis: { opacity: 0, }, label: { show: false // 隐藏文字 } } ] // zoom: 1.2, }, series: [ { // 散点配置 name: '数量', type: 'effectScatter', zlevel:2, coordinateSystem: 'geo', symbolSize: function(val){ if(val[2]>100){ return ([10,10]); }else{ return ([0.2*val[2],0.2*val[2]]); //两个参数对应宽高,点击进去省级后对应宽高乘以相应倍数 } }, symbolKeepAspect: true, showEffectOn: 'emphasis', rippleEffect: { brushType: 'stroke' }, hoverAnimation: true, data:convertData2(geoCoordMap), }, { // 地图配置 name: '', type: 'map', mapType: name, // 自定义扩展图表类型 geoIndex: 1, aspectScale: 0.75, // 长宽比 textFixed: { Alaska: [20, -20] }, //控制页面出来方式 animation:true, animationDuration: 3000, animationEasing: 'cubicInOut', label: { normal: { show: true, textStyle: { color: '#fff' } }, emphasis: { show: true, textStyle: { color: '#1A2943' } } }, itemStyle: { normal: { areaColor: '#2E4370', borderColor: '#4888CE', borderWidth: 1 }, emphasis: { areaColor: '#506798', shadowOffsetX: 10, shadowOffsetY: 10, shadowBlur: 5, borderWidth: 2, shadowColor: "#333", borderColor: 'rgba(0, 0, 0, 0)', } }, }] }); myCharts.setOption(option); }); } });
最重要的JSON数据源比较多就不放了,有需要的可以私聊我