vue2프로젝트에서 echarts 맵을 우아하게 캡슐화하는 방법은 무엇입니까? 다음 기사에서는 vue2 프로젝트에서 echarts 맵을 캡슐화하는 보다 우아한 방법을 소개할 것입니다. 이것이 여러분에게 도움이 되기를 바랍니다.
이전에 vue 프로젝트에서 전자 차트를 캡슐화하는 더 우아한 방법을 작성했습니다. 대형 화면 시각화에서는 매우 일반적으로 사용되는 데이터 차트 외에도 지방 및 도시 지도 영역을 표시하는 것도 매우 일반적으로 사용됩니다. . 동반 기사입니다. [관련 추천: vuejs 동영상 튜토리얼]
지역 지도에서 영역을 선택할 때 데이터를 표시하려면 팝업 창이 필요합니다. 다양한 스타일, 다양한 데이터 배열, 그래픽 및 텍스트 매시업, 동영상이 있습니다.. .here echarts 지역 지도 모듈을 캡슐화하는 것 외에도 사용자 정의 팝업 창 구현 및 사용자 정의 팝업 창에서 인터페이스 데이터를 동적으로 로드하는 방법도 소개합니다.
vue2
, vue를 기반으로 합니다. cli3
, echarts 5
vue2
、vue cli3
、echarts 5
先上个效果图吧,说明下实现的效果。
5.x
以下版本和5.x
以上版本引入的区别5.x
以下版本import echarts from 'echarts'
5.x
以上版本import * as echarts from 'echarts'
vue.config.js
中开启运行时编译功能runtimeCompiler: true
|-- public |-- data |-- 4401.json |-- mapdata.json |-- images |-- map-ic.png
4401.json
是广州区域的geojson
数据,用来给echarts
显示广州的区域地图mapdata.json
是模拟接口请求的假数据,自己随便自定义了,在获取数据后,看情况处理下传到封装好的echarts地图模块就行,这里模拟接口请求的知识可参考这里: https://juejin.cn/post/6995147964427534373/map-ic.png
地图自定义弹窗用到的图片|-- src |-- components |-- chart |-- options // 存放各种图表的option |-- map // 地图option |-- index.js
具体代码如下:
import * as echarts from 'echarts' const getSimpleMap = (jsonMap, data, config) => { if (!echarts.getMap(jsonMap.mark)) { echarts.registerMap(jsonMap.mark, jsonMap.json) } const defaultConfig = { tooltip: { // 窗口外框 trigger: 'item', padding: 0, borderWidth: 0, borderColor: '#FFFFFF', backgroundColor: '#FFFFFF', formatter: (params) => { const { data } = params const str = `` return str } }, geo: { map: jsonMap.mark, type: 'map', layoutCenter: ['50%', '50%'], layoutSize: '150%', zoom: 0.65, roam: false, itemStyle: { normal: { areaColor: 'rgba(201, 229, 255, 1)', shadowColor: 'rgba(142, 201, 255, 1)', shadowOffsetX: -5, shadowOffsetY: 12 } } }, series: [ { type: 'map', map: jsonMap.mark, // 自定义扩展图表类型 zoom: 0.65, // 缩放 animationDuration: 1200, itemStyle: { // 地图样式 normal: { borderColor: '#FFFFFF', borderWidth: 3, areaColor: 'rgba(201, 229, 255, 1)' } }, label: { show: true, color: '#666666', fontSize: 12, fontWeight: 400 }, emphasis: { // 鼠标移入动态的时候显示的默认样式 label: { show: true, color: '#FFFFFF', fontSize: 15, fontWeight: 600 }, itemStyle: { areaColor: 'rgba(102, 182, 255, 1)', borderColor: '#FFFFFF', borderWidth: 2 } }, layoutCenter: ['50%', '50%'], layoutSize: '150%', data: data } ] } const opt = Object.assign({}, defaultConfig, config) const { legend, tooltip, series, geo, grid } = opt const chartOpt = { grid, legend, tooltip, geo, series } return chartOpt } export default { getSimpleMap }${data.name}区号:${data.hoverObj == null ? '' : data.hoverObj.adcode}
自定义弹窗主要是在tooltip
的formatter
里面实现,自定义好html
弹窗,把params
里要显示的数据显示到对应的地方就OK了。
个人喜欢直接纯html
实现好设计给的弹窗样式,然后直接复制到formatter
里面。每次遇到不同的设计,就修改下formatter
里面的html
和匹配下要显示的数据就行了。这里可以进一步封装的,有兴趣的可以试试。
<chart-view class="map-view" :chart-option="mapOpt" height="100%" @click="handleMapClick" />
:chart-option="mapOpt"
这个是给封装的echarts
地图模块的传参,接口数据要经过处理,具体看下一节@click="handleMapClick"
这里是点击地图时,对应区域的数据,用于有下一步的操作,例如地图下钻initMap(url) { mapRequest(url).then((res) => { const mapData = res.data const jsonMap = { mark: this.mapName, json: mapData } const data = mapData.features.map((item) => { const { name, adcode } = item.properties let hoverObj = {} const objIndex = findElem(this.mapPopData, 'adcode', adcode) if (objIndex !== -1) { hoverObj = this.mapPopData[objIndex] } else { hoverObj = null } return { name, hoverObj: hoverObj } }) this.mapOpt = this.$eChartFn.getSimpleMap(jsonMap, data) }).catch((err) => { console.log(err, '加载地图失败') }) }
这里对地图geojson
数据和接口返回数据进行匹配处理,达到弹窗数据是对应地区数据的效果。
地图geojson
数据是必有adcode
字段的,所以接口数据mapPopData
hoverObj
是匹配好的每个区域的数据,最终形成数组data
,通过以下代码给封装的echarts
模块传参
this.mapOpt = this.$eChartFn.getSimpleMap(jsonMap, data)
具体代码可以参考echartMapTest
文件夹里面的index.js
文件
涉及的文件如下(具体参考代码
5.x
및 5.x< 아래 버전은 위 버전에서 도입된 차이점</h3><h4 data-id="heading-4"> <code>5.x
버전 이하|-- public |-- data |-- 4401.json |-- mapdata.json |-- images |-- map-ic.png |-- src |-- api |-- map.js // 获取地图geojson数据、地图弹窗接口模拟数据 |-- components |-- chart |-- index.vue // 图表单文件组件,供界面调用 |-- index.js // 实现自动化导入options里的图表option |-- options // 存放各种图表的option |-- map // 地图option |-- index.js |-- views |-- echartMapTest // 实例所在 |-- index.vue |-- index.scss |-- index.js |-- utils |---utils.js |-- main.js // 全局引入echarts图表
5.x
이상vue.config.js
런타임 컴파일 기능4401 .json
은 광저우 지역의 geojson
데이터로, 광저우 지역 지도를 echarts
🎜🎜2, mapdata.json
에 표시합니다. 시뮬레이션된 인터페이스에서 요청한 가짜 데이터입니다. 데이터를 얻은 후 사용자 정의할 수 있습니다. 상황에 따라 처리되어 캡슐화된 echarts 맵 모듈로 전달될 수 있습니다. 시뮬레이션된 인터페이스 요청에 대한 자세한 내용은 여기를 참조하세요: https://juejin.cn /post/6995147964427534373/🎜🎜3. .png맵 커스텀 팝업창에 사용된 그림🎜툴팁
의 formatter
에서 구현되며, 사용자 정의는 html
팝업창, 디스플레이 params
에 표시될 데이터를 해당 위치에 넣으면 괜찮습니다. 🎜🎜개인적으로는 디자인된 팝업창 스타일을 순수 html
을 이용해 직접 구현한 뒤 formatter
에 직접 복사하는 걸 좋아합니다. 다른 디자인을 만날 때마다 formatter
에서 html
을 수정하고 표시할 데이터를 일치시키면 됩니다. 관심이 있다면 여기에서 더 자세히 요약할 수 있습니다. 🎜 :chart-option="mapOpt"
차트
를 캡슐화하기 위한 것입니다. code> code>맵 모듈이 전달한 매개변수, 인터페이스 데이터를 처리해야 합니다. 자세한 내용은 다음 섹션을 참조하세요🎜🎜2. @click="handleMapClick"
해당 영역의 데이터는 다음과 같습니다. 지도를 클릭하면 지도 드릴다운과 같은 다음 작업에 사용됩니다🎜geojson
데이터 및 인터페이스 반환 팝업 데이터가 해당 지역의 데이터라는 효과를 얻기 위해 데이터가 일치되고 처리됩니다. 🎜🎜지도 geojson
데이터에는 adcode
필드가 있어야 하므로 일치를 위해 인터페이스 데이터 mapPopData
에 이 필드를 추가하는 것이 가장 좋습니다.
위 코드의 hoverObj
는 각 영역의 일치하는 데이터이며, 최종적으로 data
배열을 형성하고, 이는 캡슐화된 echarts
모듈에 전달됩니다. 다음 코드를 통해 🎜rrreee🎜구체적인 코드는 echartMapTest
폴더에 있는 index.js
파일을 참고하세요🎜코드
참조): 🎜|-- public |-- data |-- 4401.json |-- mapdata.json |-- images |-- map-ic.png |-- src |-- api |-- map.js // 获取地图geojson数据、地图弹窗接口模拟数据 |-- components |-- chart |-- index.vue // 图表单文件组件,供界面调用 |-- index.js // 实现自动化导入options里的图表option |-- options // 存放各种图表的option |-- map // 地图option |-- index.js |-- views |-- echartMapTest // 实例所在 |-- index.vue |-- index.scss |-- index.js |-- utils |---utils.js |-- main.js // 全局引入echarts图表
按代码总览
的目录去代码里找着看就行了。
https://github.com/liyoro/vue-skill
以上,就是对echarts
地图模块的封装,还有自定义弹窗的实现。使用和复用都比较方便了。
最近才发现 www.makeapie.com 停服了,挺好用的东西来的,感谢这么多年的奉献。
有需求的可转移到 PPChart,算是一个替代品了
위 내용은 vue2 프로젝트에서 echarts 맵을 우아하게 캡슐화하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!