Echarts AJAX异步加载tooltip明细数据

范培忠 2018-05-10

  需求描述:使用热力图显示某活动的日期分布强度,并当鼠标移动到某日期方块时,显示该日的明细活动信息。

  因为显示的时间周期以年为单位,一次性加载全年明细数据不太现实。故选择鼠标移动至某日期时,后台异步加载明细数据。加载期间显示Loading,待加载完成后,显示明细信息到echarts图表上。

  另外发现echarts会在鼠标在同一个日期小方块上每移动1px时都会触发tooltip的加载过程,鼠标随便一划拉就会向后端发送几十次加载请求,会导致不必要的性能占用,故在自定义加载方法细节上进行了优化。

  还有就是鼠标在同一个日期小方块上每移动1px时还会触发callback方法重新显示tooltip,导致画面闪烁,故在echarts tooltip接口处也需要进行简单的判断优化。

  最后Echarts在鼠标移入的时候会触发两次事件,其中一次会得到空白数据,不清楚是否为bug,故需对触发时的data进行校验(typeof(date) === "string")。

  关键代码如下,文章最后附上实际效果GIF演示。

异步加载数据:

var bReady = false;
var cTooltip = "";
var sLastDateInputofDoAjaxGetTooltip = "";
function doAjaxGetTooltip(date) {
    bReady = false;//设置状态为不可用

    if(sLastDateInputofDoAjaxGetTooltip === date){
        bReady = true;
        return;
    }else {
        sLastDateInputofDoAjaxGetTooltip = date;
    }

    if (typeof(date) === "string") {
        $.ajax({
            type: "post",
            url: $("#contextPath").val() + "data/records/string/" + $("#personId").val() + "/" + date,
            contentType: "application/x-www-form-urlencoded;charset=utf-8",
            success: function (data) {
                cTooltip = data;
            },
            error: function (data) {
                alert("error");
                alert(JSON.stringify(data));
            }
        });
    }
    bReady = true;//不管有没有内容,状态都要改回去
}

Echarts Option的tooltip片段:

tooltip: {
    formatter: function (params, ticket, callback) {
        //优化显示,防止闪烁
        if(sLastDateInputofDoAjaxGetTooltip === params.data[0]){
            return cTooltip;
        }else {
            doAjaxGetTooltip(params.data[0]);//异步准备数据
            //定时检查数据是否完成准备bReady, tooltip
            var itv = setInterval(function () {
                if(bReady === true){
                    callback(ticket, cTooltip);
                    window.clearInterval(itv);//停止检查
                }
            }, 100);
            return "Loading";
        }
    }
}

实际显示效果:

  可见在小方块内移动鼠标时,加载的内容只会跟随,并不会出现闪烁或再次加载。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echarts中,tooltip的formatter可以通过异步加载数据进行定制。根据引用中的核心代码,可以看到formatter函数中使用了$http方法从"http://jsonplaceholder.typicode.com/users"接口异步获取数据。在获取到数据后,通过回调函数callback将数据拼接到tooltip的内容中,实现了异步加载的效果。 所以,echarts tooltip formatter异步加载的实现方法是通过使用$http方法或其他异步请求方法获取数据,并在获取到数据后通过回调函数将数据添加到tooltip的内容中。这样就可以实现根据异步加载数据定制tooltip的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [echarts 提示框异步获取数据 —— formatter 异步回调函数的使用](https://blog.csdn.net/weixin_41192489/article/details/120130844)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [echarts.min.js](https://download.csdn.net/download/weixin_41965897/11267773)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值