zoukankan      html  css  js  c++  java
  • vue+echarts 实现map3D地图tooltip弹框读取后台返回的数据,并显示弹框

    直接说结论:把后台接口返回的数据放到map3D的data里,然后在tootip的formatter函数里,

    通过params.data来获取后台接口返回的数据,通过字符串拼接并return。点击地图区域弹框就能显示

    之前是在formatter函数里调用 that.getTooltip(), gettooltip()是写在methods里的一个获取后台接口数据的方法,实践证明不行,

    需要点击地图区域两次才展示弹框内容,原因是在点击的时候先执行了formatter里渲染html的代码,后执行的接口调用的axiso

    请求,这就导致第一次点击的时候获取的内容是空的,一直在纠结异步问题,查找了很多async await 相关的文章,受这篇博文

    启发tooltip.formatter后来改进如文章开头所述,废话不多说,上图:

    控制台打印截图,console.log(params):

      全局tooltip核心代码:

           tooltip: {
                            trigger: "item",
                            axisPointer: {
                              type: "none",
                              textStyle: {
                                  color: "#fff"
                              }
                            },
                            // confine:true, //是否将 tooltip 框限制在图表的区域内  
                            triggerOn : 'click',//提示框触发的条件                   
                            transitionDuration :.8,//提示框浮层的移动动画过渡时间,单位是 s                  
                            backgroundColor:'#09455c',
                            // position: function (pos, params, el, elRect, size) {
                            //     var obj = {top: 10};
                            //     obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 30;
                            //     return obj;
                            // },
                            position: function (point,params,dom,rect,size){
                              // 鼠标坐标和提示框位置的参考坐标系是:以外层div的左上角那一点为原点,x轴向右,y轴向下
                              // 提示框位置
                              var x = 0;//x坐标位置
                              var y = 0; //y坐标位置
                              // 当前鼠标位置
                              var pointX = point[0];
                              var pointY = point[1];
                              // 提示框大小
                              var boxWidth = size.contentSize[0];
                              var boxHeight = size.contentSize[1];
                              // boxWidth > pointX说明鼠标左边放不下提示框
                              if(boxWidth > pointX){
                                x = pointX;
                              }else{  // x轴为当前鼠标位置在加20
                                x = pointX + 20;
                              }
                              //boxHeight > pointY说明鼠标上边放不下提示框
                              if(boxHeight > pointY){
                                y = 5;
                              }else{ //上边放的下
                                y = pointY - boxHeight;
                              }
                              return [x,y];
                            },
                            formatter: function(params,ticket,callback) {
                              console.log(params)                         
                              let areaName = params.data.name;  
                              let toolData ={};  
                              let webData = {}; 
                              let tooltipContent = '';//xx内容
                              let toolWebContent =''; //yy内容                         
                              if (params.data) {
                                if(params.data.tool){
                                    toolData = params.data.tool.districtItemRank;//xx数据
                   webData = params.data.tool.districtOrgRank;//yy
    数据
    // tooltip formatter渲染自定义组件容器 // 遍历toolData xx数据 if(toolData != undefined && toolData.length>0){ for(let i = 0;i<toolData.length;i++){ tooltipContent += ` <li> <span class='${toolData[i].rank}'>${i+1}</span> <span>${toolData[i].itemName}</span> <span>${toolData[i].districtItemCount}</span> </li>`; } } //遍历webData yy数据 if(webData != undefined && webData.length>0){ for(let j = 0;j<webData.length;j++){ toolWebContent += ` <li> <span class='${toolData[j].rank}'>${j+1}</span> <span>${webData[j].orgName}</span> <span>${webData[j].districtOrgCount}</span> </li>`; } } } return ` <ul id='tool_alert'> <li>${params.name}(${params.value})</li> <li class='tool_tit'>xx办理排行<i class='font_orange'>TOP10</i></li> ${tooltipContent} <li class='tool_tit'>yy办理排行<i class='font_orange'>TOP5</i></li> ${toolWebContent} </ul>`; }; }, },
  • 相关阅读:
    php或JS中输出判断项
    拿大神的博客来记一下
    2017.6.8 项目进展
    2017.6.8
    2017.5.18
    2017.5.17
    2017.5.16
    如何实现从php传数据到js
    项目笔记
    tp框架之Model类与命名空间
  • 原文地址:https://www.cnblogs.com/qdkfyym/p/14395957.html
Copyright © 2011-2022 走看看