vue2 프로젝트에서 echarts 맵을 우아하게 캡슐화하는 방법에 대한 자세한 설명

青灯夜游
풀어 주다: 2022-03-11 20:05:16
앞으로
2497명이 탐색했습니다.

vue2프로젝트에서 echarts 맵을 우아하게 캡슐화하는 방법은 무엇입니까? 다음 기사에서는 vue2 프로젝트에서 echarts 맵을 캡슐화하는 보다 우아한 방법을 소개할 것입니다. 이것이 여러분에게 도움이 되기를 바랍니다.

vue2 프로젝트에서 echarts 맵을 우아하게 캡슐화하는 방법에 대한 자세한 설명

이전에 vue 프로젝트에서 전자 차트를 캡슐화하는 더 우아한 방법을 작성했습니다. 대형 화면 시각화에서는 매우 일반적으로 사용되는 데이터 차트 외에도 지방 및 도시 지도 영역을 표시하는 것도 매우 일반적으로 사용됩니다. . 동반 기사입니다. [관련 추천: vuejs 동영상 튜토리얼]

지역 지도에서 영역을 선택할 때 데이터를 표시하려면 팝업 창이 필요합니다. 다양한 스타일, 다양한 데이터 배열, 그래픽 및 텍스트 매시업, 동영상이 있습니다.. .here echarts 지역 지도 모듈을 캡슐화하는 것 외에도 사용자 정의 팝업 창 구현 및 사용자 정의 팝업 창에서 인터페이스 데이터를 동적으로 로드하는 방법도 소개합니다.

배울 수 있는 내용

  • 1. 지도 모듈 캡슐화, 재사용 가능
  • 2. echarts 지도용 사용자 정의 팝업 창(사용자 정의 스타일, 사용자 정의 데이터 및 사용자 정의 그림 표시) 다른 차트에 대한 사용자 정의 팝업 창을 참조할 수 있습니다.
  • 3. echarts 지도 사용자 정의 팝업 창은 인터페이스 데이터를 동적으로 표시합니다
  • 4. 이 지도 모듈도 vue2, vue를 기반으로 합니다. cli3 , echarts 5

렌더링

  • 먼저 렌더링을 통해 달성된 효과를 설명하겠습니다. vue2vue cli3echarts 5
  • 效果图

    先上个效果图吧,说明下实现的效果。

    • 1、广州区域地图
    • 2、自定义弹窗,显示选中地区的名称、区号,弹窗加了个小图片
    • 3、基本上图片、视频什么的,都可以在自定义弹窗上显示,这里只展示下自定义弹窗加图片的方式,视频同理的,不介绍了,有兴趣自己随便试试就好
    • 4、弹窗数据是从模拟接口取的

    vue2 프로젝트에서 echarts 맵을 우아하게 캡슐화하는 방법에 대한 자세한 설명

    注意

    1、vue中echarts 5.x以下版本和5.x以上版本引入的区别

    5.x以下版本

    import echarts from 'echarts'
    로그인 후 복사

    5.x以上版本

    import * as echarts from 'echarts'
    로그인 후 복사

    2、记得在vue.config.js中开启运行时编译功能

    runtimeCompiler: true
    로그인 후 복사

    实现

    数据准备

    |-- public
    	|-- data
    		|-- 4401.json
    		|-- mapdata.json
    	|-- images
    		|-- map-ic.png
    로그인 후 복사
    • 1、4401.json是广州区域的geojson数据,用来给echarts显示广州的区域地图
    • 2、mapdata.json是模拟接口请求的假数据,自己随便自定义了,在获取数据后,看情况处理下传到封装好的echarts地图模块就行,这里模拟接口请求的知识可参考这里: https://juejin.cn/post/6995147964427534373/
    • 3、map-ic.png地图自定义弹窗用到的图片

    echarts地图模块封装

    |-- 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 = `
    vue2 프로젝트에서 echarts 맵을 우아하게 캡슐화하는 방법에 대한 자세한 설명${data.name}
    区号:
    ${data.hoverObj == null ? '' : data.hoverObj.adcode}
    ` 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 }
    로그인 후 복사

    自定义弹窗主要是在tooltipformatter里面实现,自定义好html弹窗,把params里要显示的数据显示到对应的地方就OK了。

    个人喜欢直接纯html实现好设计给的弹窗样式,然后直接复制到formatter里面。每次遇到不同的设计,就修改下formatter里面的html和匹配下要显示的数据就行了。这里可以进一步封装的,有兴趣的可以试试。

    页面调用

    <chart-view
          class="map-view"
          :chart-option="mapOpt"
          height="100%"
          @click="handleMapClick" />
    로그인 후 복사
    • 1、 :chart-option="mapOpt"这个是给封装的echarts地图模块的传参,接口数据要经过处理,具体看下一节
    • 2、@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, &#39;adcode&#39;, 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, &#39;加载地图失败&#39;)
        })
    }
    로그인 후 복사

    这里对地图geojson数据和接口返回数据进行匹配处理,达到弹窗数据是对应地区数据的效果。

    地图geojson数据是必有adcode字段的,所以接口数据mapPopDatahoverObj是匹配好的每个区域的数据,最终形成数组data,通过以下代码给封装的echarts模块传参

    this.mapOpt = this.$eChartFn.getSimpleMap(jsonMap, data)
    로그인 후 복사

    具体代码可以参考echartMapTest文件夹里面的index.js文件

    代码总览

    涉及的文件如下(具体参考代码

    1. 광저우 지역 지도🎜🎜2. 선택한 지역의 이름과 지역번호가 표시되는 맞춤 팝업 창🎜🎜3. 기본적으로 사진, 동영상 등이 추가됩니다. 등은 팝업 창에서 사용자 정의할 수 있습니다. 여기서는 팝업 창을 사용자 정의하고 사진을 추가하는 방법만 설명하므로 소개하지 않겠습니다. 관심이 있으시면 직접 시도해 보세요🎜🎜4. 팝업 창 데이터는 시뮬레이션 인터페이스에서 가져옵니다🎜🎜vue2 프로젝트에서 echarts 맵을 우아하게 캡슐화하는 방법에 대한 자세한 설명🎜< h2 data-id="heading-2">참고 🎜

    1. vue /code>echarts 5.x5.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 이상

    rrreee

    2. vue.config.js 런타임 컴파일 기능

    rrreee

    Implementation🎜<에서 활성화해야 합니다. h3 data-id="heading-8">데이터 준비

    rrreee🎜🎜1, 4401 .json은 광저우 지역의 geojson 데이터로, 광저우 지역 지도를 echarts🎜🎜2, mapdata.json에 표시합니다. 시뮬레이션된 인터페이스에서 요청한 가짜 데이터입니다. 데이터를 얻은 후 사용자 정의할 수 있습니다. 상황에 따라 처리되어 캡슐화된 echarts 맵 모듈로 전달될 수 있습니다. 시뮬레이션된 인터페이스 요청에 대한 자세한 내용은 여기를 참조하세요: https://juejin.cn /post/6995147964427534373/🎜🎜3. .png맵 커스텀 팝업창에 사용된 그림🎜

    echarts 맵 모듈 캡슐화

    rrreee🎜구체 코드는 다음과 같습니다. 🎜rrreee🎜사용자 정의 팝업창은 주로 툴팁formatter에서 구현되며, 사용자 정의는 html팝업창, 디스플레이 params에 표시될 데이터를 해당 위치에 넣으면 괜찮습니다. 🎜🎜개인적으로는 디자인된 팝업창 스타일을 순수 html을 이용해 직접 구현한 뒤 formatter에 직접 복사하는 걸 좋아합니다. 다른 디자인을 만날 때마다 formatter에서 html을 수정하고 표시할 데이터를 일치시키면 됩니다. 관심이 있다면 여기에서 더 자세히 요약할 수 있습니다. 🎜

    페이지 호출

    rrreee🎜🎜1. :chart-option="mapOpt"차트를 캡슐화하기 위한 것입니다. code> code>맵 모듈이 전달한 매개변수, 인터페이스 데이터를 처리해야 합니다. 자세한 내용은 다음 섹션을 참조하세요🎜🎜2. @click="handleMapClick"해당 영역의 데이터는 다음과 같습니다. 지도를 클릭하면 지도 드릴다운과 같은 다음 작업에 사용됩니다🎜

    인터페이스 데이터 처리

    rrreee🎜여기 지도가 있습니다 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,算是一个替代品了

    (学习视频分享:vuejs教程web前端

    위 내용은 vue2 프로젝트에서 echarts 맵을 우아하게 캡슐화하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:juejin.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿