Echart多Geo缩放拖曳。有两层地图,一层用于作为背景,一层用于显示,实现阴影的效果。实现鼠标同步缩放拖动两层地图
Echart多Geo下实现缩放拖曳
需求
有两层地图,一层用于作为背景,一层用于显示,实现阴影的效果。
实现鼠标缩放拖动地图
分析
Echarts geo 具有roam属性,设置为true可以实现geo的缩放及拖曳。
但因为两个geo重叠,在上层地图上进行操作的时候,只影响上层,下层的背景层不动,会造成错位。
可以考虑监听上层的缩放及位置属性,将其赋值给下层,从而实现下层跟随运动
方案
多个GEO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| geo: [{ zlevel:2, map: 'china', type: 'map', roam: true, zoom: 1.2, label: { show: true, color: '#1996b8', emphasis: { color: '#1996b8' } }, itemStyle:{ normal:{ areaColor: '#0e2f50', borderColor: '#19968', color: '#1996b8', emphasis: { color: '#fff', areaColor: '#0a3767' } }, }, },{ map: 'china', roam: true, zoom: 1.25, animationDurationUpdate: 0, label: { show: false, color: '#fff' }, itemStyle:{ normal:{ areaColor: '1996b8', borderColor: '#1d5685' }, }, emphasis: { areaColor: '#2a333d' }, }],
|
同步缩放的实现
上层用roam属性,可以进行缩放拖动,通过georoam事件监听,将上层的缩放属性zoom和视觉中心位置center属性赋值给下面一层geo,从而实现同步
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var myChart = this.$echarts.init(document.getElementById("map1")); var option = { ... } myChart.setOption(option);
myChart.on('georoam',function(params){ var option = myChart.getOption(); if(params.zoom!=null&¶ms.zoom!=undefined){ option.geo[1].zoom=option.geo[0].zoom + 0.1; option.geo[1].center=option.geo[0].center; }else{ option.geo[1].center=option.geo[0].center; } myChart.setOption(option); });
|
注意
需要为下层geo设置animationDurationUpdate:0
,否则下层跟随上层运动会有动画延迟,反而造成卡顿的视觉效果