• 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>`; }; }, },
  • 相关阅读:
    简易 Javascript DOM 包 | 元素水平垂直居中 | 动态执行 JS 代码 | 获取指定元素
    POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
    算法分析_运行时间计算的一般法则C 语言复习
    函数执行效率的小比较PHP 函数学习
    最大子序列问题及其求解C 语言学习
    选择排序(Selection Sort) C 语言学习
    求两个正整数的最大公因子C 语言复习
    国外十大最流行 PHP 框架排名(转)
    将一个整数的各位数字颠倒后输出(C 语言)
    还是 push 比较好
  • 原文地址:https://www.cnblogs.com/qdkfyym/p/14395957.html
Copyright © 2020-2023  润新知