From e878e18845b388252b8863e5c38064120099617e Mon Sep 17 00:00:00 2001 From: Julia Cwynar Date: Mon, 23 Jun 2025 15:20:28 +0200 Subject: [PATCH] feat: adding tooltip.trigger activeitem option --- src/component/marker/MarkerModel.ts | 2 +- src/component/tooltip/TooltipModel.ts | 4 ++-- src/component/tooltip/TooltipView.ts | 31 +++++++++++++++++++++++++-- src/util/types.ts | 2 +- test/visualMap-continuous.html | 5 +++-- 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/component/marker/MarkerModel.ts b/src/component/marker/MarkerModel.ts index 28d29a5768..8773ba525a 100644 --- a/src/component/marker/MarkerModel.ts +++ b/src/component/marker/MarkerModel.ts @@ -90,7 +90,7 @@ export interface MarkerOption extends ComponentOption, AnimationOptionMixin { data?: unknown[] tooltip?: CommonTooltipOption & { - trigger?: 'item' | 'axis' | boolean | 'none' + trigger?: 'item' | 'activeItem' | 'axis' | boolean | 'none' } } diff --git a/src/component/tooltip/TooltipModel.ts b/src/component/tooltip/TooltipModel.ts index c9598c0a03..16c182db43 100644 --- a/src/component/tooltip/TooltipModel.ts +++ b/src/component/tooltip/TooltipModel.ts @@ -49,7 +49,7 @@ export interface TooltipOption extends CommonTooltipOption { showContent: true, // 'trigger' only works on coordinate system. - // 'item' | 'axis' | 'none' + // 'item' | 'activeItem' | 'axis' | 'none' trigger: 'item', // 'click' | 'mousemove' | 'none' diff --git a/src/component/tooltip/TooltipView.ts b/src/component/tooltip/TooltipView.ts index d5bf5d8f21..8a7c7ae4f6 100644 --- a/src/component/tooltip/TooltipView.ts +++ b/src/component/tooltip/TooltipView.ts @@ -669,12 +669,39 @@ class TooltipView extends ComponentView { positionDefault ? { position: positionDefault } : null ); - const tooltipTrigger = tooltipModel.get('trigger'); - if (tooltipTrigger != null && tooltipTrigger !== 'item') { + const tooltipTrigger = tooltipModel.get('trigger'); + if (tooltipTrigger === 'none' || tooltipTrigger === 'axis') { return; } const params = dataModel.getDataParams(dataIndex, dataType); + let hide: boolean = false; + const visualMap: any = ecModel.option.visualMap; + if (visualMap) { + visualMap.forEach((model: any) => { + let value: any; + switch (typeof model.dimension) { + case 'string': + value = data.getValues(dataIndex)[Array.prototype.indexOf(model.dimension)]; + break; + case 'number': + value = data.getValues(dataIndex)[model.dimension]; + break; + default: + return; + } + if ( + tooltipTrigger === 'activeItem' + && (value < model.range[0] || value > model.range[1]) + ) { + hide = true; + return; + } + }); + } + if (hide) { + return; + } const markupStyleCreator = new TooltipMarkupStyleCreator(); // Pre-create marker style for makers. Users can assemble richText // text in `formatter` callback and use those markers style. diff --git a/src/util/types.ts b/src/util/types.ts index 3bf5c827c5..9bb7e6f00c 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -1368,7 +1368,7 @@ export type ComponentItemTooltipLabelFormatterParams = { * Tooltip option configured on each series */ export type SeriesTooltipOption = CommonTooltipOption & { - trigger?: 'item' | 'axis' | boolean | 'none' + trigger?: 'item' | 'activeItem' | 'axis' | boolean | 'none' }; diff --git a/test/visualMap-continuous.html b/test/visualMap-continuous.html index 075f251dd8..ebe6630e34 100644 --- a/test/visualMap-continuous.html +++ b/test/visualMap-continuous.html @@ -258,7 +258,7 @@ top: 'top' }, tooltip: { - trigger: 'item', + trigger: 'activeItem', formatter: function (params) { const list = (params.value + '').split('.'); const value = list[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') @@ -287,7 +287,8 @@ text: ['High', 'Low'], // realtime: false, calculable: true, - color: ['orangered', 'yellow', 'lightskyblue'] + color: ['orangered', 'yellow', 'lightskyblue'], + dimension: 0 }, series: [ {