ECharts实现地图涟漪效果

效果图如下:

  源码:

<div ref="chart"></div>
  // 引入地图数据
  import chinaMap from "../china.json"
  export default {
    data() {
      return {
        myChart: null,
        option: null,
        seriesData:[
          {
            "name": "北京",
            "value": [116.24, 39.55],
            "text": "测试点1"
          },
          {
            "name": "上海",
            "value": [121.47, 31.23],
            "text": "测试点2"
          },
          {
            "name": "厦门",
            "value": [118.1, 24.46],
            "text": "测试点3"
          },
          {
            "name": "重庆",
            "value": [106.33, 29.35],
            "text": "测试点4"
          },
          {
            "name": "丽江",
            "value": [100.25, 26.86],
            "text": "测试点5"
          }
        ]
      }
    },
    mounted() {
      this.initData()
    },
    methods: {
      initData() {
        this.option = {
          backgroundColor: 'transparent',
          tooltip: {
            show: true,
            triggerOn: 'click'
          },
          // 这个属性配置一定要有,要不然无法实现光圈效果
          geo: {
            show: true,
            map: 'china',
            zoom: 0.8, // 视角缩放比例
            roam: true, // 开启缩放和平移
            width: '80%',
            label: {
              normal: {
                show: false
              },
              emphasis: {
                show: false
              }
            },
            itemStyle: {
              normal: { // 地图背景
                areaColor: '#0061B2',
                borderColor: '#3B5077'
              },
              emphasis: {
                areaColor: '#2B91B7'
              }
            }
          },
          series: [
            {
              name: '涟漪效果',
              type: 'effectScatter', // 动态散点图(涟漪特效)
              coordinateSystem: 'geo', // 坐标系为geo(地理坐标系)
              // 第一种写法
              // data: [
              //   // 这里放置你的数据点,每个数据点应包含经纬度和值
              //   [116.46, 39.92, 5], // 北京
              //   [121.47, 31.23, 10], // 上海
              //   [118.1, 24.46, 15], // 厦门
              //   [100.25, 26.86, 6], // 丽江
              //   [106.33, 29.35, 6], // 重庆
              // ],
              // 第二种写法
              data: this.seriesData,
              symbolSize: function (val) { // 动态设置散点大小的回调函数
                // return val[2] * 2;
                return 10;
              },
              // 这几个样式一定要加,加上才有那种光圈的效果
              showEffectOn: 'render', // 动画效果出现的时机 // emphasis
              rippleEffect: { // 波纹特性配置
                brushType: 'stroke', // fill
                color: '#3be8ff' // 涟漪颜色
              },
              hoverAnimation: true, // 鼠标悬停动画
              label: { // 气泡-文本标签
                normal: {
                  formatter: '{b}',
                  position: 'right',
                  color: '#fff',
                  show: true
                }
              },
              symbol: 'circle', // 散点形状
              itemStyle: {
                normal: {
                  color: '#3be8ff', // 散点颜色
                  shadowBlur: 10,
                  shadowColor: '#333'
                }
              },
              zlevel: 1
            }
          ]
        }
        //注册地图到echarts中  这里的 "china" 要与地图数据的option中的geo中的map对应
        echarts.registerMap("china", { geoJSON: chinaMap })
        this.myChart = echarts.init(this.$refs.chart)
        this.$nextTick(() => {
          this.myChart.setOption(this.option)
        })
        this.myChart.on('click', (e) => {
          console.log('点击', e)
        })
      },
   }
 }

缩小页面,使得地图改变大小:

      resize() {
        this.myChart.resize()
      }

在mounted添加:

window.addEventListener('resize', this.resize)

在destroyed添加:

window.removeEventListener('resize', this.resize)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的示例代码,演示如何在echarts涟漪效果地图中添加label点击事件: ```javascript // 初始化echarts实例 var myChart = echarts.init(document.getElementById('myChart')); // 配置涟漪效果地图 var option = { series: [{ type: 'effectScatter', coordinateSystem: 'geo', data: [ {name: '北京', value: [116.46, 39.92]}, {name: '上海', value: [121.48, 31.22]}, {name: '广州', value: [113.23, 23.16]} ], rippleEffect: { brushType: 'stroke' }, label: { show: true, formatter: '{b}', position: 'right' }, itemStyle: { color: 'purple' } }], geo: { map: 'china', label: { emphasis: { show: false } }, roam: true, itemStyle: { normal: { areaColor: '#323c48', borderColor: '#111' }, emphasis: { areaColor: '#2a333d' } } } }; // 绑定label点击事件 myChart.on('click', function (params) { if (params.componentType === 'series' && params.seriesType === 'effectScatter') { alert('您点击了' + params.name); } }); // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); ``` 在上面的代码中,我们先初始化了一个echarts实例,然后配置了一个涟漪效果地图。在配置中,我们设置了一个label,用于显示地图上的城市名称。接着,我们通过`myChart.on('click', function (params) {...})`绑定了一个label点击事件的处理函数。在处理函数中,我们判断`params.componentType`和`params.seriesType`是否分别等于`series`和`effectScatter`,如果是,则表示用户点击了一个label,我们就可以通过`params.name`获取到该城市的名称,然后进行相应的处理。 注意,由于涟漪效果地图是基于geo组件实现的,因此我们需要在geo组件上绑定点击事件,而不是在series组件上绑定。同时,我们还需要判断`params.seriesType`是否等于`effectScatter`,因为在涟漪效果地图中,我们使用了effectScatter类型的散点图来展示城市的位置信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值