vue3+echarts实现世界地图以及轨线(label使用fomatter+rich动态添加图片及背景色,以及label如何添加动态边框色)

news2024/10/7 18:20:23

背景

最近项目开发,需要开发一个世界地图,并且实现经纬度对应的点对点轨线动效,效果如下:
在这里插入图片描述

问题

  1. 如何在刚打开页面的时候就显示地点名称
  2. label如何同时添加图片和背景色
  3. label怎么动态修改字体颜色及图片以及动态边框色
  4. 添加动效及轨线
  5. 世界地图json数据

所有配置项代码放在4处,来不及看详解的看官请拉到4处适量食用

解决

1.如何在刚打开页面的时候就显示地点名称

一开始考虑到有样式使用html来写比较方便,我是想使用tooltip来做的,因为tooltip的formatter可以使用html标签来写,但是查询了官网和各大论坛也没找到能一下子显示所有tooltip的api,只找到了显示某个tooltip的api,

dispatchAction

  charts.dispatchAction({
                        type: 'showTip',
                        position: [-100, -150], // 自己可以设置显示位置 负数为正方向 正数为反方向
                        seriesIndex:0,  // 显示第几个series
                        dataIndex: 1 // 显示第几个数据
                    });

所以也就放弃了,选择使用label来写,虽然路程艰辛但是好在实现了功能

2.label如何同时添加图片和背景色

首先我们知道label的formatter是无法编译html标签的,我们只能按照
{ 类名 | 变量 }
的形式进行样式修改,同时我们需要注意的是,这种写法是无法在两个类名的外部包裹父类的,例如
{ 父类名 | { 类名A | 变量一 }{ 类名B | 变量 二} }
这种写法是不被允许的。所以我们可以将父类的样式写入label的normal中,其他子类样式按照formatter+rich的方法写,同时rich允许使用

backgroundColor: {
image:‘https://www.xiaohongshu.com/explore/6136147700000000010240c0’,
},

的方式来添加图片:

label: {
            normal: {
              show: true,
              position: 'top', //显示位置
              padding: [2,8,2,8],
              borderRadius: 10,
              backgroundColor: '#fff',  //整个label背景色
              borderWidth: 1,
              align: 'center',
              offset: [0, -5],
              formatter: (data) => '{a|}{b|' +type+ '}',
              rich: {
                a: {
                  backgroundColor: {
                   image:'https://www.xiaohongshu.com/explore/6136147700000000010240c0',
                  },
                  height: 11,
                },
              
                b: {
                  color: '#35c1a5',
                  fontSize: 12,
                  padding: [0, 0, -2, 4],
                  align: 'center',
                },
              },
            },
          },

3.怎么动态修改字体颜色及图片以及动态边框色

首先修改字体颜色只需要在formatter中根据需求进行判断给予不同的类名即可,动态图片,根据官方文档可知rich-》下的所有样式都是不支持接收参数的,所以我们只能在类名上做文章,因为我这里图片是存储在前端本地的,所以需要一一罗列出来,同时图表数据中每一条都给予了唯一key值用来与样式类名进行对应
在这里插入图片描述

  label: {
            normal: {
              show: true,
              position: 'top', //显示位置
              padding: [2, 8, 2, 8],
              borderRadius: 10,
              backgroundColor: '#fff',
              borderWidth: 1,
              align: 'center',
              offset: [0, -5],
              formatter: (data) => {
              //动态字体颜色
                let type = ['a', 'b', 'c'][data.data.type];
                // data.data.key唯一类名,用于确定图片
                return '{' + data.data.key + '|}{' + type + '|' + data.name + '}';
              },
              rich: {
                ...mapObj,
                  height: 11,
                },
                a: {
                  color: '#8e2323',
                  fontSize: 12,
                  padding: [0, 0, -2, 4],
                  align: 'center',
                },
                b: {
                  color: '#35c1a5',
                  fontSize: 12,
                  padding: [0, 0, -2, 4],
                  align: 'center',
                },
                c: {
                  color: '#e26647',
                  fontSize: 12,
                  padding: [0, 0, -2, 4],
                  align: 'center',
                },
              },
            },
          },
          

最后,你可能注意到我这段lebel代码中并未给予边框色,是因为根据据官方文档可知,我们可以在图表数据中给予label属性进行配置项覆盖,例如

[{name:‘美国’,value:[111.222.2],label:{borderColor:‘red’}}]

4.添加动效及轨线

这里我将放所有的option代码,各位看官自行阅读理解

//图表配置
export const chartOption = (data) => {
  return {
    geo: {
      map: 'world',
      zoom: 1.2,
      show: true,
      roam: false,
      tooltip: { show: false },
      label: {
        emphasis: { show: true },
      },
      itemStyle: {
        normal: {
          show: 'true',
          color: 'rgb(96,126,210)', //地图背景色
          borderColor: '#E1ECFF',
          //省市边界线
        },
        emphasis: {
          show: 'true',
          color: '#BDC8D7', //悬浮背景}
        },
      },
      series: [
        {
          type: 'lines', //绘制连线zlevel: 2,
          animation: false,
          large: true,
          effect: {
            show: true,
            constantSpeed: 20,
            symbol: 'pin',
            symbolSize: 10,
            trailLength: 0.1,
            color: '#fff',
          },
          lineStyle: {
            color: '#fff',
            width: 1,
            opacity: 0.2,
            curveness: 0.1,
            type: 'dashed',
          },
          data: lienData.value,
        },
        {
          type: 'effectScatter', //绘制点
          coordinateSystem: 'geo',
          zlevel: 2,
          rippleEffect: {
            period: 4, //动画时间,值越小速度越快
            brushType: 'stroke', //波纹绘制方式stroke, fili
            scale: 4, //波纹圆环最大限制,值越大波纹越大
          },
          symbolSize: function () {
            return 5;
          },

          itemStyle: { color: '#fff' },
          label: {
            normal: {
              show: true,
              position: 'top', //显示位置
              padding: [2, 8, 2, 8],
              borderRadius: 10,
              backgroundColor: '#fff',
              borderWidth: 1,
              align: 'center',
              offset: [0, -5],
              formatter: (data) => {
                let type = ['a', 'b', 'c'][data.data.type];
                return '{' + data.data.key + '|}{' + type + '|' + data.name + '}';
              },
              rich: {
                ...mapObj,
                any: {
                  backgroundColor: {
                    image: new URL('./assets/imge/country/anyrun.svg', import.meta.url).href,
                  },
                  height: 11,
                },
                a: {
                  color: '#8e2323',
                  fontSize: 12,
                  padding: [0, 0, -2, 4],
                  align: 'center',
                },
                b: {
                  color: '#35c1a5',
                  fontSize: 12,
                  padding: [0, 0, -2, 4],
                  align: 'center',
                },
                c: {
                  color: '#e26647',
                  fontSize: 12,
                  padding: [0, 0, -2, 4],
                  align: 'center',
                },
              },
            },
          },
          data: data,
        },
        {
          type: 'effectScatter', //绘制中心辐射点
          coordinateSystem: 'geo',
          zlevel: 2,
          rippleEffect: {
            period: 5, //动画时间,值越小速度越快
            brushType: 'stroke', //波纹绘制方式 stroke, fillscale: 5
          },
          data: lienData.value,
        },
      ],
    },
  };
};

需要注意的是我这里按照需求格式化的图表数据结构大概为

[{ name:‘地点名’,value:[经度,纬度],key:‘确定动态图片的唯一key’,label:{ label边框样式 } }]

代码中lienData数据格式为,这是官方规定的数据格式

[{ fromName:‘起点名’,toName:‘终点名’,coords:[[起点经度,起点纬度][终点经度,终点纬度]] }]

5.世界地图json数据

世界地图json下载

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

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

相关文章

YumRepo Error: All mirror URLs are not using ftp, http[s] or file解决办法

文章目录 一、问题背景二、问题原因三、解决方法 一、问题背景 CentOS6.5利用yum -y install gcc命令安装程序报错YumRepo Error: All mirror URLs are not using ftp, http[s] or file.Eg. Invalid release/repo/arch combination/ removing mirrorlist with no valid mirror…

maven安装教程(结合eclipse和IDEA)

一.安装maven 本文须知:安装maven环境之前要先安装java jdk环境(没有安装java环境的可以先去看安装JAVA环境的教程)Maven 3.3+ require JDK 1.7 及以上。 第一步:下载maven(本教程安装的是3.8.4) 官方下载链接:https://maven.apache.org/download.cgi Binary是可执行版本…

电子台账:生成的数据和图表导出到一个excel表中

目录 1 数据选择 1.1 选择1行数据 1.2 选择1列数据 2 图表设置 3 数据导出 为了便于进行数据分析和数据展示,可以把生成的汇总数据生成图表,然后对图表进行定制修改,最后把数据和图表一起导出到一个excel表中。 程序目前支持两种数据作…

【C++学习笔记】函数

值传递 值传递&#xff1a;函数调用时实参将数值传入给形参 做值传递时函数的形参发生改变&#xff0c;并不会影响实参 因为形参的作用域在函数内只有在调用函数时才会为其分配内存&#xff0c;函数调用结束后释放函数内的变量内存。 #include<iostream> using namespa…

mybatis04-mybatis缓存、分页插件、注解开发(一对一、多对一、多对多)

mybatis04 mybatis 缓存 一、mybatis 缓存概述 1、缓存 ​ 缓存 是存在于内存中的临时数据&#xff0c;使用缓存的目的是&#xff1a;减少和数据库的交互次数&#xff0c;提高执行效率。 2、mybatis 缓存 ​ mybatis 与 大多数的持久层框架一样&#xff0c;提供了缓存策略…

网络视频监控如何入门?如何安装和配置、设备选择和实时监控?

网络视频监控是一种先进的安全技术&#xff0c;它可以通过互联网连接到远程视频服务器&#xff0c;使用户可以随时随地监控所关注的地点。本文将介绍网络视频监控的基础入门知识&#xff0c;包括安装和配置、设备选择和实时监控等方面。 一、安装和配置 在进行网络视频监控前&…

PMP项目管理-[第五章]范围管理

范围管理知识体系&#xff1a; 规划范围管理&#xff1a; 收集需求&#xff1a; 定义范围&#xff1a; 创建WBS&#xff1a; 确认范围&#xff1a; 控制范围&#xff1a; 5.1 范围管理 产品范围&#xff1a;某项产品、服务或成果所具有的特性和功能 项目范围&#xff1a;为交付…

商品价格监控业务场景,API数据分析

商品价格监控指的是对特定商品价格进行实时监控和跟踪&#xff0c;及时更新最新价格并分析价格变化的行为。这种监控可以帮助企业及时了解市场行情&#xff0c;并根据价格变化情况做出相应的调整&#xff0c;以更好地应对市场变化。 一般来说&#xff0c;商品价格监控需要以下…

使用RabbitMq实现延迟队列

下载RabbitMq&#xff1a;本地安装rabbitmq_王胖胖1112的博客-CSDN博客 1、pom文件引入 <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit-test</artifactId> <scope>test&…

关于小程序云开发cms内容管理无法使用,无法同步内容模型到云开发数据库的解决方案

小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我们没有办法正常使用cms了。如果你开通完cms带下面这个标识的话&#xff0c;就代表你是新版本&…

NVT | NVT SDK光敏电阻ADC配置与调试

NVT | NVT SDK光敏电阻ADC配置与调试 时间:2023-04-21 文章目录 `NVT` | `NVT` `SDK`光敏电阻`ADC`配置与调试1.参考2.电路原理图3.代码编写3-1.配置ADC通道3-2.初始化ADC3-3.ADC值读取3-4.ADC读取测试4.头文件1.参考 1.光敏电阻:原理及作用、符号及参数、选型及电路 2.

科技现代闪耀上海秀场 北京现代在上海车展上演转型之姿

4月18日&#xff0c;作为疫情后的第一个大型国际车展&#xff0c;第二十届上海国际汽车工业展览会盛况空前&#xff0c;新产品、新技术、新战略、新体验争先登台。作为合资企业的技术实力代表&#xff0c;北京现代不仅重磅发布了首款智能家居SUV车型MUFASA&#xff0c;并且以强…

微信小程序开发教程(二)--上传小程序

接上文,我们已经有一个小例子了。 在模拟器的位置,点击头像,会登录。 此时我们可以第一次尝试将我们的小程序进行上传。 点击下图箭头所指位置: 点击确定: 填写版本号和备注信息,选择上传: 在网页管理小程序上,选择上传,以下都选择红框所在位置:

多线段合并的两种方法:Cadance allegro与CAD交互

文章目录 问题引入Pe命令&#xff08;推荐&#xff09;block命令 问题引入 我们知道在Cadance allegro 中&#xff0c;涉及到板框文件和丝印层倒角的问题。而这些板框和丝印倒角的图形来自于CAD中的结构文件&#xff08;dxf文件&#xff09;&#xff0c;再导入到Cadance allegr…

人工智能︱AI数字人有什么用?

有了数字人&#xff0c;直播都不用亲自上阵了&#xff1f; 那咱随便捏个数字人放到直播间&#xff0c;是不是就能轻松把货卖出去啦&#xff1f; 虚拟数字人是AI技术的一种应用&#xff0c;我们先来看看它的定义&#xff1a; 虚拟数字人是通过计算机程序和人工智能技术创建的…

【Java 数据结构】包装类 (通俗易懂)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

粒子组件解析

1. GameObject → Create Other → Particle System。 2. 选中 Particle System&#xff0c;可看到下列屬性&#xff1a; 3.Particle System&#xff1a; Duration&#xff1a; 粒子发射时间(设定为5秒&#xff0c;每5秒发射一次粒子)。 Looping&#xff1a;是否循环产生粒子…

FE_CSS 元素的显示与隐藏

类似网站广告&#xff0c;当我们点击关闭就不见了&#xff0c;但是我们重新刷新页面&#xff0c;会重新出现&#xff01;本质&#xff1a;让一个元素在页面中隐藏或者显示出&#xff1a; display 显示隐藏visibility 显示隐藏overflow 溢出显示隐藏 1 display 属性用于设置一…

深入理解栈:从CPU和函数的视角看栈的管理、从栈切换的角度理解进程和协程

我们知道栈被操作系统安排在进程的高地址处&#xff0c;它是向下增长的。但这只是对栈相关知识的“浅尝辄止”。栈是每一个程序员都很熟悉的话题&#xff0c;但你敢说你真的完全了解它吗&#xff1f;我相信&#xff0c;你在工作中肯定遇到过栈溢出&#xff08;StackOverflow&am…

网工的四个等级,你在第几个?

网工的天花板有多高&#xff1f; 初级网工&#xff0c;月薪1万以内&#xff1b;高级网工&#xff0c;月薪2-3万&#xff1b;顶级网工&#xff0c;年薪百万不是梦。 对于大多数网工&#xff0c;需要完成的是从初级到高级的进阶。网工是靠技术吃饭的&#xff0c;对于众多在一线干…