Echarts優(yōu)化圖例點擊事件

Echarts在檢測到圖例點擊時,將觸發(fā)legendselectchanged事件,提供的參數(shù)包括:

  1. name,點擊的圖例名

  2. seleced: {name1: value1, name2: value2, ...},所有圖例的選中狀態(tài)
    其中name為圖例名稱,value取true | false,表示該項在點擊后處于選中狀態(tài)還是未選中狀態(tài)

通過該事件,我們可以對Echarts的圖例點擊效果作修改,規(guī)則包括:

  1. (初始)全選時,點擊圖例中的某項,將只顯示該項而隱藏其他項

  2. 當唯一顯示的項目被取消選中時,恢復為全選狀態(tài)

例如:點擊圖例的第三項

  1. 點擊前:Yes,Yes,Yes,Yes,Yes

    • 修改前:Yes,Yes,No,Yes,Yes

    • 修改后:No,No,Yes,No,No

  2. 點擊前:No,No,Yes,No,No

    • 修改前:No,No,No,No,No

    • 修改后:Yes,Yes,Yes,Yes,Yes

代碼如下

/**
 * 優(yōu)化圖例點擊事件
 * 1. (初始)全選時,點擊圖例中的某項,將只顯示該項而隱藏其他項
 * 2. 當唯一顯示的項目被取消選中時,恢復為全選狀態(tài)
 * @param {Object} theChart Echarts元素
 */
function setLegendAction(theChart) {
    let triggerAction = function (action, selected) {
        legend = [];
        for (let name in selected) {
            if (selected.hasOwnProperty(name)) {
                legend.push({name: name});
            }
        }
        theChart.dispatchAction({
            type: action,
            batch: legend
        });
    };

    let isFirstUnSelect = function (selected, legend) {
        if (selected[legend] === true) return false;
        let unSelectedCount = 0;
        for (let name in selected) {
            if (!selected.hasOwnProperty(name)) {
                continue;
            }
            if (selected[name] === false) {
                unSelectedCount++;
            }
        }
        return unSelectedCount === 1;
    };

    let isAllUnSelected = function (selected) {
        let selectedCount = 0;
        for (let name in selected) {
            if (!selected.hasOwnProperty(name)) {
                continue;
            }
            // selected對象內true代表選中,false代表未選中
            if (selected[name] === true) {
                selectedCount++;
            }
        }
        return selectedCount === 0;
    };

    theChart.on('legendselectchanged', function (params) {
        console.log(params)
        let selected = params.selected;
        let legend = params.name;
        // 使用legendToggleSelect動作將重新觸發(fā)legendselectchanged事件,導致本函數(shù)重復運行從而丟失selected對象
        if (selected !== undefined) {
            if (isFirstUnSelect(selected, legend)) {
                triggerAction('legendToggleSelect', selected);
            } else if (isAllUnSelected(selected)) {
                triggerAction('legendSelect', selected);
            }
        }
    });
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容