兩個echarts地圖聯動高亮區域

項目要求左右兩張地圖可以在鼠標懸浮的時候高亮部分聯動,曾嘗試了connect很差使,因此本身寫了這段代碼。代碼思路爲:數組

  1. 鼠標移入地圖時,另外一側的地圖根據鼠標懸浮獲取到的區域name使該區域高亮;
  2. 鼠標移入地圖時,根據鼠標在地圖的座標位置,使另外一側的地圖tooltip懸浮於獲取的座標位置,保證兩張地圖的tooltip的位置相同。

圖片描述
碰見的坑:echarts

  1. 使用dispatchAction引起showTip,會發現tooltip只能顯示很短的時間,因此我鼠標移入地圖時,給另外一個地圖設置tooltip[0].alwaysShowContent=truetooltip[0].triggerOn="none"。官網要求使用dispatchAction引起showTip須要設置triggerOn="none",可是我試了有沒有都行,有alwaysShowContent=true就行;
  2. 在設置tooltip的時候,使用的是對象。而獲取的時候tooltip會成爲數組,也許echarts是爲了知足多個tooltip的需求。

函數只要傳進去echarts實例就行,代碼以下:ide

//前面的代碼省略直接調用,傳入echarts實例對象
connectMap(chart1,chart2);

function connectMap(chart1,chart2){
    //當鼠標移入左側的地圖上
        chart1.on("mouseover",function(target){
            
            var option=chart2.getOption();
            option.tooltip[0].alwaysShowContent=true;
            option.tooltip[0].triggerOn="none";
            chart2.setOption(option,true);
            chart2.dispatchAction({
                type:'downplay',
                seriesName:'rightmap'
            })
            chart2.dispatchAction({
                type:'highlight',
                name:target.name,
            })
        
    })
    chart1.on("mousemove",function(target){
        
        chart2.dispatchAction({
            type:'showTip',
            name:target.name,
            x:target.event.offsetX,
            y:target.event.offsetY
        })
    })
    chart1.on("mouseout",function(){
        var option=chart2.getOption();
        option.tooltip[0].alwaysShowContent=false;
        option.tooltip[0].triggerOn="mousemove";
        chart2.setOption(option,true);
        chart2.dispatchAction({
            type:'hideTip'
        })
    })

    //當鼠標移到右邊的地圖
    chart2.on("mouseover",function(target){
        var option=chart1.getOption();
        option.tooltip[0].alwaysShowContent=true;
        option.tooltip[0].triggerOn="none";
        chart1.setOption(option,true);
        chart1.dispatchAction({
            type:'downplay',
            seriesName:'rightmap'
        })
        chart1.dispatchAction({
            type:'highlight',
            name:target.name,
        })
        
    })
    chart2.on("mousemove",function(target){
        
        chart1.dispatchAction({
            type:'showTip',
            name:target.name,
            x:target.event.offsetX,
            y:target.event.offsetY
        })
    })
    chart2.on("mouseout",function(){
        var option=chart1.getOption();
        option.tooltip[0].alwaysShowContent=false;
        option.tooltip[0].triggerOn="mousemove";
        chart1.setOption(option,true);
        chart1.dispatchAction({
            type:'hideTip'
        })
    })
}
相關文章
相關標籤/搜索