Skip to content

Commit 2fab291

Browse files
authored
Merge pull request #18164 from sz-p/add-legend-mouse-event
feat(legend): legend support triggerEvent (#18144)
2 parents 9ce6fe4 + 87561ee commit 2fab291

File tree

3 files changed

+98
-3
lines changed

3 files changed

+98
-3
lines changed

src/component/legend/LegendModel.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ export interface LegendOption extends ComponentOption, LegendStyleOption,
236236
*/
237237
tooltip?: CommonTooltipOption<LegendTooltipFormatterParams>
238238

239+
triggerEvent?: boolean
239240
}
240241

241242
class LegendModel<Ops extends LegendOption = LegendOption> extends ComponentModel<Ops> {
@@ -530,7 +531,9 @@ class LegendModel<Ops extends LegendOption = LegendOption> extends ComponentMode
530531

531532
tooltip: {
532533
show: false
533-
}
534+
},
535+
536+
triggerEvent: false
534537
};
535538
}
536539

src/component/legend/LegendView.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import {createSymbol, ECSymbol} from '../../util/symbol';
5151
import SeriesModel from '../../model/Series';
5252
import { createOrUpdatePatternFromDecal } from '../../util/decal';
5353
import { getECData } from '../../util/innerStore';
54+
import Element from 'zrender/src/Element';
5455

5556
const curry = zrUtil.curry;
5657
const each = zrUtil.each;
@@ -177,6 +178,7 @@ class LegendView extends ComponentView {
177178
const contentGroup = this.getContentGroup();
178179
const legendDrawnMap = zrUtil.createHashMap();
179180
const selectMode = legendModel.get('selectedMode');
181+
const triggerEvent = legendModel.get('triggerEvent');
180182

181183
const excludeSeriesId: string[] = [];
182184
ecModel.eachRawSeries(function (seriesModel) {
@@ -234,6 +236,11 @@ class LegendView extends ComponentView {
234236
ecData.ssrType = 'legend';
235237
});
236238
}
239+
itemGroup.eachChild(child => {
240+
if (triggerEvent) {
241+
this.packEventData(child, legendModel, seriesModel, dataIndex, name);
242+
}
243+
});
237244

238245
legendDrawnMap.set(name, true);
239246
}
@@ -287,7 +294,11 @@ class LegendView extends ComponentView {
287294
ecData.ssrType = 'legend';
288295
});
289296
}
290-
297+
itemGroup.eachChild(child => {
298+
if (triggerEvent) {
299+
this.packEventData(child, legendModel, seriesModel, dataIndex, name);
300+
}
301+
});
291302
legendDrawnMap.set(name, true);
292303
}
293304

@@ -307,7 +318,22 @@ class LegendView extends ComponentView {
307318
this._createSelector(selector, legendModel, api, orient, selectorPosition);
308319
}
309320
}
310-
321+
private packEventData(
322+
el: Element,
323+
legendModel: LegendModel,
324+
seriesModel: SeriesModel<SeriesOption & SymbolOptionMixin>,
325+
dataIndex: number,
326+
name: string
327+
) {
328+
const eventData = {
329+
componentType: 'legend',
330+
componentIndex: legendModel.componentIndex,
331+
dataIndex,
332+
value: name,
333+
seriesIndex: seriesModel.seriesIndex,
334+
};
335+
getECData(el).eventData = eventData;
336+
};
311337
private _createSelector(
312338
selector: LegendSelectorButtonOption[],
313339
legendModel: LegendModel,

test/legend-action.html

Lines changed: 66 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)