中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

ECharts 事件處理

ECharts 中我們可以通過(guò)監(jiān)聽(tīng)用戶的操作行為來(lái)回調(diào)對(duì)應(yīng)的函數(shù)。

ECharts 通過(guò) on 方法來(lái)監(jiān)聽(tīng)用戶的行為,例如監(jiān)控用戶的點(diǎn)擊行為。

ECharts 中事件分為兩種類型:

用戶鼠標(biāo)操作點(diǎn)擊,如 'click'、'dblclick'、'mousedown'、'mousemove'、'mouseup'、'mouseover'、'mouseout'、'globalout'、'contextmenu' 事件。

還有一種是用戶在使用可以交互的組件后觸發(fā)的行為事件,例如在切換圖例開(kāi)關(guān)時(shí)觸發(fā)的 'legendselectchanged' 事件),數(shù)據(jù)區(qū)域縮放時(shí)觸發(fā)的 'datazoom' 事件等等。

myChart.on('click', function (params) {
    // 在用戶點(diǎn)擊后控制臺(tái)打印數(shù)據(jù)的名稱
    console.log(params);
});

myChart.on('legendselectchanged', function (params) {
    console.log(params);
});

chart.on('click', 'series.line', function (params) {
    console.log(params);
});

chart.on('mouseover', {seriesIndex: 1, name: 'xx'}, function (params) {
    console.log(params);
});

鼠標(biāo)事件

ECharts 支持的鼠標(biāo)事件類型,包括 'click'、'dblclick'、'mousedown'、'mousemove'、'mouseup'、'mouseover'、'mouseout'、'globalout'、'contextmenu' 事件。

以下實(shí)例在點(diǎn)擊柱形圖時(shí)會(huì)彈出對(duì)話框:

實(shí)例

// 基于準(zhǔn)備好的dom,初始化ECharts實(shí)例
var myChart = echarts.init(document.getElementById('main'));

// 指定圖表的配置項(xiàng)和數(shù)據(jù)
var option = {
? ? xAxis: {
? ? ? ? data: ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"]
? ? },
? ? yAxis: {},
? ? series: [{
? ? ? ? name: '銷(xiāo)量',
? ? ? ? type: 'bar',
? ? ? ? data: [5, 20, 36, 10, 10, 20]
? ? }]
};

// 使用剛指定的配置項(xiàng)和數(shù)據(jù)顯示圖表。
myChart.setOption(option);
// 處理點(diǎn)擊事件并且彈出數(shù)據(jù)名稱
myChart.on('click', function (params) {
? ? alert(params.name);
});

運(yùn)行代碼 ?

所有的鼠標(biāo)事件包含參數(shù) params,這是一個(gè)包含點(diǎn)擊圖形的數(shù)據(jù)信息的對(duì)象,格式如下:

{
    // 當(dāng)前點(diǎn)擊的圖形元素所屬的組件名稱,
    // 其值如 'series'、'markLine'、'markPoint'、'timeLine' 等。
    componentType: string,
    // 系列類型。值可能為:'line'、'bar'、'pie' 等。當(dāng) componentType 為 'series' 時(shí)有意義。
    seriesType: string,
    // 系列在傳入的 option.series 中的 index。當(dāng) componentType 為 'series' 時(shí)有意義。
    seriesIndex: number,
    // 系列名稱。當(dāng) componentType 為 'series' 時(shí)有意義。
    seriesName: string,
    // 數(shù)據(jù)名,類目名
    name: string,
    // 數(shù)據(jù)在傳入的 data 數(shù)組中的 index
    dataIndex: number,
    // 傳入的原始數(shù)據(jù)項(xiàng)
    data: Object,
    // sankey、graph 等圖表同時(shí)含有 nodeData 和 edgeData 兩種 data,
    // dataType 的值會(huì)是 'node' 或者 'edge',表示當(dāng)前點(diǎn)擊在 node 還是 edge 上。
    // 其他大部分圖表中只有一種 data,dataType 無(wú)意義。
    dataType: string,
    // 傳入的數(shù)據(jù)值
    value: number|Array
    // 數(shù)據(jù)圖形的顏色。當(dāng) componentType 為 'series' 時(shí)有意義。
    color: string
}

如何區(qū)分鼠標(biāo)點(diǎn)擊到了哪里:

myChart.on('click', function (params) {
    if (params.componentType === 'markPoint') {
        // 點(diǎn)擊到了 markPoint 上
        if (params.seriesIndex === 5) {
            // 點(diǎn)擊到了 index 為 5 的 series 的 markPoint 上。
        }
    }
    else if (params.componentType === 'series') {
        if (params.seriesType === 'graph') {
            if (params.dataType === 'edge') {
                // 點(diǎn)擊到了 graph 的 edge(邊)上。
            }
            else {
                // 點(diǎn)擊到了 graph 的 node(節(jié)點(diǎn))上。
            }
        }
    }
});

使用 query 只對(duì)指定的組件的圖形元素的觸發(fā)回調(diào):

chart.on(eventName, query, handler);

query 可為 string 或者 Object。

如果為 string 表示組件類型。格式可以是 'mainType' 或者 'mainType.subType'。例如:

chart.on('click', 'series', function () {...});
chart.on('click', 'series.line', function () {...});
chart.on('click', 'dataZoom', function () {...});
chart.on('click', 'xAxis.category', function () {...});

如果為 Object,可以包含以下一個(gè)或多個(gè)屬性,每個(gè)屬性都是可選的:

{
    <mainType>Index: number // 組件 index
    <mainType>Name: string // 組件 name
    <mainType>Id: string // 組件 id
    dataIndex: number // 數(shù)據(jù)項(xiàng) index
    name: string // 數(shù)據(jù)項(xiàng) name
    dataType: string // 數(shù)據(jù)項(xiàng) type,如關(guān)系圖中的 'node', 'edge'
    element: string // 自定義系列中的 el 的 name
}

例如:

chart.setOption({
    // ...
    series: [{
        name: 'uuu'
        // ...
    }]
});
chart.on('mouseover', {seriesName: 'uuu'}, function () {
    // series name 為 'uuu' 的系列中的圖形元素被 'mouseover' 時(shí),此方法被回調(diào)。
});

例如:

chart.setOption({
    // ...
    series: [{
        // ...
    }, {
        // ...
        data: [
            {name: 'xx', value: 121},
            {name: 'yy', value: 33}
        ]
    }]
});
chart.on('mouseover', {seriesIndex: 1, name: 'xx'}, function () {
    // series index 1 的系列中的 name 為 'xx' 的元素被 'mouseover' 時(shí),此方法被回調(diào)。
});

例如:

chart.setOption({
    // ...
    series: [{
        type: 'graph',
        nodes: [{name: 'a', value: 10}, {name: 'b', value: 20}],
        edges: [{source: 0, target: 1}]
    }]
});
chart.on('click', {dataType: 'node'}, function () {
    // 關(guān)系圖的節(jié)點(diǎn)被點(diǎn)擊時(shí)此方法被回調(diào)。
});
chart.on('click', {dataType: 'edge'}, function () {
    // 關(guān)系圖的邊被點(diǎn)擊時(shí)此方法被回調(diào)。
});

例如:

chart.setOption({
    // ...
    series: {
        // ...
        type: 'custom',
        renderItem: function (params, api) {
            return {
                type: 'group',
                children: [{
                    type: 'circle',
                    name: 'my_el',
                    // ...
                }, {
                    // ...
                }]
            }
        },
        data: [[12, 33]]
    }
})
chart.on('mouseup', {element: 'my_el'}, function () {
    // name 為 'my_el' 的元素被 'mouseup' 時(shí),此方法被回調(diào)。
});

你可以在回調(diào)函數(shù)中獲得這個(gè)對(duì)象中的數(shù)據(jù)名、系列名稱后在自己的數(shù)據(jù)倉(cāng)庫(kù)中索引得到其它的信息候更新圖表,顯示浮層等等,如下示例代碼:

實(shí)例

myChart.on('click', function (parmas) {
? ? $.get('detail?q=' + params.name, function (detail) {
? ? ? ? myChart.setOption({
? ? ? ? ? ? series: [{
? ? ? ? ? ? ? ? name: 'pie',
? ? ? ? ? ? ? ? // 通過(guò)餅圖表現(xiàn)單個(gè)柱子中的數(shù)據(jù)分布
? ? ? ? ? ? ? ? data: [detail.data]
? ? ? ? ? ? }]
? ? ? ? });
? ? });
});

組件交互的行為事件

在 ECharts 中基本上所有的組件交互行為都會(huì)觸發(fā)相應(yīng)的事件,常用的事件和事件對(duì)應(yīng)參數(shù)在 events 文檔中有列出。

下面是監(jiān)聽(tīng)一個(gè)圖例開(kāi)關(guān)的示例:

實(shí)例

// 圖例開(kāi)關(guān)的行為只會(huì)觸發(fā) legendselectchanged 事件
myChart.on('legendselectchanged', function (params) {
? ? // 獲取點(diǎn)擊圖例的選中狀態(tài)
? ? var isSelected = params.selected[params.name];
? ? // 在控制臺(tái)中打印
? ? console.log((isSelected ? '選中了' : '取消選中了') + '圖例' + params.name);
? ? // 打印所有圖例的狀態(tài)
? ? console.log(params.selected);
});

運(yùn)行代碼 ?


代碼觸發(fā) ECharts 中組件的行為

上面我們只說(shuō)明了用戶的交互操作,但有時(shí)候我們也會(huì)需要在程序里調(diào)用方法并觸發(fā)圖表的行為,比如顯示 tooltip。

ECharts 通過(guò) dispatchAction({ type: '' }) 來(lái)觸發(fā)圖表行為,統(tǒng)一管理了所有動(dòng)作,也可以根據(jù)需要去記錄用戶的行為路徑。

以上實(shí)例用于輪播餅圖中的 tooltip:

實(shí)例

setInterval(function () {
? ? var dataLen = option.series[0].data.length;
? ? // 取消之前高亮的圖形
? ? myChart.dispatchAction({
? ? ? ? type: 'downplay',
? ? ? ? seriesIndex: 0,
? ? ? ? dataIndex: app.currentIndex
? ? });
? ? app.currentIndex = (app.currentIndex + 1) % dataLen;
? ? // 高亮當(dāng)前圖形
? ? myChart.dispatchAction({
? ? ? ? type: 'highlight',
? ? ? ? seriesIndex: 0,
? ? ? ? dataIndex: app.currentIndex
? ? });
? ? // 顯示 tooltip
? ? myChart.dispatchAction({
? ? ? ? type: 'showTip',
? ? ? ? seriesIndex: 0,
? ? ? ? dataIndex: app.currentIndex
? ? });
}, 1000);

運(yùn)行代碼 ?