項目要求左右兩張地圖能夠在鼠標懸浮的時候高亮部分聯動,曾嘗試了connect不好使,所以自己寫了這段代碼。代碼思路為:
- 鼠標移入地圖時,另一側的地圖根據鼠標懸浮獲取到的區域name使該區域高亮;
- 鼠標移入地圖時,根據鼠標在地圖的坐標位置,使另一側的地圖tooltip懸浮於獲取的坐標位置,保證兩張地圖的tooltip的位置相同。

遇見的坑:
- 使用dispatchAction引發showTip,會發現tooltip只能顯示很短的時間,所以我鼠標移入地圖時,給另一個地圖設置
tooltip[0].alwaysShowContent=true和tooltip[0].triggerOn="none"。官網要求使用dispatchAction引發showTip需要設置triggerOn="none",但是我試了有沒有都行,有alwaysShowContent=true就行; - 在設置tooltip的時候,使用的是對象。而獲取的時候tooltip會成為數組,也許echarts是為了滿足多個tooltip的需求。
函數只要傳進去echarts實例就行,代碼如下:
//前面的代碼省略直接調用,傳入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'
})
})
}
