首页 > 其他分享 >Echarts的地图实现拖拽缩放同步功能(解决多层geo缩放、拖动卡顿问题)

Echarts的地图实现拖拽缩放同步功能(解决多层geo缩放、拖动卡顿问题)

时间:2023-10-09 17:34:35浏览次数:31  
标签:map 缩放 拖动 geo show rgba true Echarts

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Echarts伪3D地图    Echarts的地图实现拖拽缩放同步功能(解决多层geo缩放、拖动卡顿问题)</title>
    <script src="./js/echarts.min4.8.js"></script>
    <script src="./320000_full.js"></script>
    <!-- <script src="./map-shandong.js"></script> -->
    <!-- <script src="./map-shanxi.js"></script> -->
    <style>
      * {
        margin: 0;
      }
      .map-panel {
        position: relative;
        box-sizing: border-box;
        width: 100vw;
        height: 100vh;
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        grid-template-rows: 55px auto;
        grid-template-areas:
          "header header"
          "left right";
        gap: 10px;
        padding: 10px;
      }
      .title {
        grid-area: header;
        display: grid;
        justify-items: center;
        align-items: center;
        font-size: 28px;
        font-weight: bold;
      }
      .shandong-map {
        grid-area: left;
        border: 1px solid #007acc;
        border-radius: 5px;
      }
      .shanxi-map {
        grid-area: right;
        border: 1px solid #007acc;
        border-radius: 5px;
      }
    </style>
  </head>
  <body>
    <div class="map-panel">
      Echarts的地图实现拖拽缩放同步功能(解决多层geo缩放、拖动卡顿问题)
      <div id="shandong-map" class="shandong-map"></div>
      <div id="shanxi-map" class="shanxi-map"></div>
    </div>
  </body>
  <script>
    window.onload = () => {
      initMap("mapjson", mapjson, "shandong-map");
      initMap("mapjson", mapjson, "shanxi-map");
    };

    function initMap(mapName, mapJsonData, domId) {
      echarts.registerMap(mapName, mapJsonData);
      let option = {
        tooltip: {
          show: false,
        },
        geo: [
          {
            show: true,
            map: mapName,
            zoom: 1,
            roam: 'false',
animationDurationUpdate:0,//实现缩放、拖动同步且不卡顿
            regions: [],
            zlevel: 1,
            aspectScale: 0.85,
            layoutCenter: ["50%", "50%"],
            layoutSize: "90%",
            itemStyle: {
              areaColor: "transparent",
            },
          },
          {
            show: true,
            map: mapName,
            zoom: 1,
            roam: 'false',
animationDurationUpdate:0,//实现缩放、拖动同步且不卡顿
            zlevel: 4,
            layoutCenter: ["50.5%", "50.5%"],
            layoutSize: "90%",
            aspectScale: 0.85,
            itemStyle: {
              borderWidth: 1,
              borderColor: "rgba(22, 186, 212,0.8)",
              shadowColor: "rgba(80, 183, 140,0.5)",
              shadowOffsetY: 5,
              shadowBlur: 15,
              areaColor: "rgba(5,21,35,0.1)",
            },
            silent: true,
          },
          {
            show: true,
            map: mapName,
            zoom: 1,
            roam: 'false',
animationDurationUpdate:0,//实现缩放、拖动同步且不卡顿
            zlevel: 3,
            layoutCenter: ["51%", "51%"],
            layoutSize: "90%",
            aspectScale: 0.85,
            itemStyle: {
              borderWidth: 1,
              borderColor: "rgba(9, 170, 148,0.6)",
              shadowColor: "rgb(80,183,140)",
              shadowOffsetY: 5,
              shadowBlur: 15,
              areaColor: "transpercent",
            },
            silent: true,
          },
          {
            show: true,
            map: mapName,
            zoom: 1,
            roam: 'false',
animationDurationUpdate:0,//实现缩放、拖动同步且不卡顿
            zlevel: 2,
            layoutCenter: ["51.5%", "51.5%"],
            layoutSize: "90%",
            aspectScale: 0.85,
            itemStyle: {
              borderWidth: 1,
              borderColor: "rgba(105, 174, 253,0.4)",
              shadowColor: "rgba(10, 177, 105,0.4)",
              shadowOffsetY: 15,
              shadowBlur: 10,
              areaColor: "transpercent",
            },
            silent: true,
          },
          {
            show: true,
            map: mapName,
            zoom: 1,
            roam: 'false',
animationDurationUpdate:0,//实现缩放、拖动同步且不卡顿
            zlevel: 1,
            layoutCenter: ["52%", "52%"],
            layoutSize: "90%",
            aspectScale: 0.85,
            itemStyle: {
              borderWidth: 5,
              borderColor: "rgb(6,125,119)",
              shadowColor: "rgba(10,177,105,0.3)",
              shadowOffsetY: 15,
              shadowBlur: 10,
              areaColor: "rgba(5,21,35,0.1)",
            },
            silent: true,
          },

        ],
        series: [
          {
            type: "map",
            map: mapName,
            zoom: 1,
            roam: true,
animationDurationUpdate:0,//实现缩放、拖动同步且不卡顿
            aspectScale: 0.85,
            layoutCenter: ["50%", "50%"],
            layoutSize: "90%",
            selectedMode: false,
            itemStyle: {
              normal: {
                label: {
                  show: true,
                  color: "#FF0",
                  fontSize: 14,
                },
                borderColor: "#FFFFFF",
                borderWidth: 1,
                areaColor: {
                  type: "linear",
                  x: 1200,
                  y: 0,
                  x2: 0,
                  y2: 0,
                  colorStops: [
                    {
                      offset: 0,
                      color: "rgb(60,213,147)", // 0% 处的颜色
                    },
                    {
                      offset: 1,
                      color: "rgba(126, 207, 195,0.75)", // 50% 处的颜色
                    },
                  ],
                  global: true, // 缺省为 false
                },
              },
              emphasis: {
                label: {
                  show: true,
                  color: "#FF0",
                  fontSize: 14,
                },
                areaColor: "rgba(18, 190, 115, 0.6)",
                borderColor: "#ffdc00",
              },
            },
            zlevel: 99,
            data: [],
          },
        ],
      };

      let mapChart = echarts.init(document.getElementById(domId));
      mapChart.setOption(option);
      window.onresize = () => {
        mapChart.resize();
      };

      mapChart.on('georoam',(params)=>{
      let option = mapChart.getOption();//获得option对象
      let len=option.geo.length;
      if(params.zoom != null){ //捕捉到缩放时
        for(var i=0;i<len;i++){
            option.geo[i].center=option.series[0].center;
            option.geo[i].zoom=option.series[0].zoom;
        }
      }else{//捕捉到拖曳时

        for(var i=0;i<len;i++){
            option.geo[i].center=option.series[0].center;
        }
      }
      mapChart.setOption(option);//设置option
    })
    }
  </script>
</html>

标签:map,缩放,拖动,geo,show,rgba,true,Echarts
From: https://www.cnblogs.com/7c89/p/17752267.html

相关文章

  • vue3+ts中使用echarts
    1. 下载npminstall-Secharts2.使用方法一(推荐使用)<divclass="echart_box"ref="echartDom"></div><scriptsetuplang="ts">import*asechartsfrom"echarts";constechartDom=ref()//使用ref创建虚拟DOM引......
  • echarts容器的宽度根据父元素宽度变化进行自适应
    根据浏览器窗口大小变化进行自适应,使用window.onresize=()=>myChart.resize()浏览器窗口不变,容器大小变化(例如:侧边菜单栏收缩),vue3为例letmyChart=null;onMounted(()=>{setTimeout(()=>{//渲染画布方法getEchart();//画布自适应代码constresi......
  • 引入echarts时报错 “TypeError: Cannot read properties of undefined (reading ‘in
     用import*asechartsfrom'echarts' 替换  importechartsfrom'echarts',便可以有效解决 ......
  • 大屏项目按照宽度缩放
    注:如果高度也缩放会导致大屏项目中图片拉伸的问题,所以本方法不包含高度缩放 constfunctionOne=(function(win){ varbodyStyle=document.createElement('style') bodyStyle.innerHTML=`body{width:1920px;height:1080px!important;}` document.documentEle......
  • 题解 P9702【[GDCPC2023] Computational Geometry】
    这题一看就不是计算几何,考虑区间DP。设凸多边形的\(n\)个顶点依次为\(P_1,P_2,\cdots,P_n\)。设\(f_{i,j}\)在\(i<j\)时表示\(P_i,P_{i+1},\cdots,P_{j-1},P_j\)组成的多边形的直径的平方,在\(i>j\)时表示\(P_i,P_{i+1},\cdots,P_n,P_1,\cdots,P_{j-1},P_j\)组......
  • 图像缩放
    <!DOCTYPEhtml><html><head><metaname="viewport"content="width=device-width,initial-scale=1.0"><style>*{box-sizing:border-box;}.img-zoom-container{position:relative;}.img-zoom-lens{p......
  • Springboot+Echarts+Element(二)
    今天主要是记录一些问题,主要是在使用vue通过axios发送请求的时候,起初我认为需要把vue和springboot整合到一块但是在听完课之后发现并不需要,因为vue的目的是实现前后端分离的开发,因此两个项目可以同时运行,调整vue项目就是改前端代码,调整springboot就是改后端代码,前端只负责发送请......
  • y轴标签与柱状图样色统一 echarts
    option={title:{text:'WorldPopulation'},tooltip:{trigger:'axis',axisPointer:{type:'shadow'}},legend:{},grid:{left:'3%',right:'4%',b......
  • echarts折线图 分段柱形图
    option={tooltip:{trigger:'axis',axisPointer:{//Useaxistotriggertooltiptype:'shadow'//'shadow'asdefault;canalsobe'line'or'shadow'}},legend:{t......
  • pageofficeV6.0另存文件为HTML格式
    转载:另存文件为HTML格式另存文件为HTML格式注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。在实际项目开发中,有时需要满足一些没有安装Office软件的客户端电脑或者手机端浏览文档的需求。为了实现这个功能,我们......