diff --git a/src/chart/bar/PictorialBarView.ts b/src/chart/bar/PictorialBarView.ts index bae7f4f8d5f1f42bd583acb7ae7d13bad1dd028c..2f11fe409e58bc0485b63f7b13ccb3951df2357c 100644 --- a/src/chart/bar/PictorialBarView.ts +++ b/src/chart/bar/PictorialBarView.ts @@ -144,7 +144,7 @@ class PictorialBarView extends ChartView { const cartesian = seriesModel.coordinateSystem; const baseAxis = cartesian.getBaseAxis(); const isHorizontal = baseAxis.isHorizontal(); - const coordSysRect = cartesian.grid.getRect(); + const coordSysRect = cartesian.master.getRect(); const opt: CreateOpts = { ecSize: {width: api.getWidth(), height: api.getHeight()}, diff --git a/src/component/helper/BrushTargetManager.ts b/src/component/helper/BrushTargetManager.ts index c9e5c6d6a3f1056c3b6bcf4b58a1c397c15f2953..b01122e18eec721591b2f924049689345af3876f 100644 --- a/src/component/helper/BrushTargetManager.ts +++ b/src/component/helper/BrushTargetManager.ts @@ -396,7 +396,7 @@ const panelRectBuilders: Record = { grid: function (this: BrushTargetInfoCartesian2D) { // grid is not Transformable. - return this.coordSys.grid.getRect().clone(); + return this.coordSys.master.getRect().clone(); }, geo: function (this: BrushTargetInfoGeo) { diff --git a/src/coord/CoordinateSystem.ts b/src/coord/CoordinateSystem.ts index 84fd2f569deda710a1696119dad5a38c73754e21..07ab843342cf13bea72d4968c4c591fd682f29df 100644 --- a/src/coord/CoordinateSystem.ts +++ b/src/coord/CoordinateSystem.ts @@ -99,6 +99,12 @@ export interface CoordinateSystem { type: string + /** + * Master of coordinate system. For example: + * Grid is master of cartesian. + */ + master?: CoordinateSystemMaster + // Should be the same as its coordinateSystemCreator. dimensions: DimensionName[]; diff --git a/src/coord/cartesian/Cartesian2D.ts b/src/coord/cartesian/Cartesian2D.ts index 5387411f57b536cfaecc5a1051e392a3e7146534..9f421b951a309a3ac8c98b423b84e809dcf097d6 100644 --- a/src/coord/cartesian/Cartesian2D.ts +++ b/src/coord/cartesian/Cartesian2D.ts @@ -23,8 +23,8 @@ import Cartesian from './Cartesian'; import { ScaleDataValue } from '../../util/types'; import Axis2D from './Axis2D'; import { CoordinateSystem } from '../CoordinateSystem'; -import Grid from './Grid'; import GridModel from './GridModel'; +import Grid from './Grid'; export const cartesian2DDimensions = ['x', 'y']; @@ -34,10 +34,10 @@ class Cartesian2D extends Cartesian implements CoordinateSystem { readonly dimensions = cartesian2DDimensions; - // Injected - grid: Grid; model: GridModel; + master: Grid; + /** * Base axis will be used on stacking. */ diff --git a/src/coord/cartesian/Grid.ts b/src/coord/cartesian/Grid.ts index 6c803f9d033b3ae60e3bc6ac3fdb0e1b690d8792..b5d4ae06d1d856724a572dfb5d2ee3a34053aaf7 100644 --- a/src/coord/cartesian/Grid.ts +++ b/src/coord/cartesian/Grid.ts @@ -333,12 +333,12 @@ class Grid implements CoordinateSystemMaster { this._axesMap = axesMap; /// Create cartesian2d - each(axesMap.x, function (xAxis, xAxisIndex) { - each(axesMap.y, function (yAxis, yAxisIndex) { + each(axesMap.x, (xAxis, xAxisIndex) => { + each(axesMap.y, (yAxis, yAxisIndex) => { const key = 'x' + xAxisIndex + 'y' + yAxisIndex; const cartesian = new Cartesian2D(key); - cartesian.grid = this; + cartesian.master = this; cartesian.model = gridModel; this._coordsMap[key] = cartesian; @@ -346,8 +346,8 @@ class Grid implements CoordinateSystemMaster { cartesian.addAxis(xAxis); cartesian.addAxis(yAxis); - }, this); - }, this); + }); + }); function createAxisCreator(dimName: Cartesian2DDimensionName) { return function (axisModel: CartesianAxisModel, idx: number): void { diff --git a/src/coord/cartesian/prepareCustom.ts b/src/coord/cartesian/prepareCustom.ts index 93b4382f199cfff00199b0f4be3ef8461699c575..29cbf939f443d303bd466972055b1100001e060d 100644 --- a/src/coord/cartesian/prepareCustom.ts +++ b/src/coord/cartesian/prepareCustom.ts @@ -34,7 +34,7 @@ function dataToCoordSize(this: Cartesian2D, dataSize: number[], dataItem: number } export default function (coordSys: Cartesian2D) { - const rect = coordSys.grid.getRect(); + const rect = coordSys.master.getRect(); return { coordSys: { // The name exposed to user is always 'cartesian2d' but not 'grid'. diff --git a/src/layout/barGrid.ts b/src/layout/barGrid.ts index 5e096bc5b888c21528fbf50e041d246be41cd057..059d6b4b31a0acc1b44c4e3832d8444e4b2f2d0b 100644 --- a/src/layout/barGrid.ts +++ b/src/layout/barGrid.ts @@ -548,7 +548,7 @@ export const largeLayout: StageHandler = { const data = seriesModel.getData(); const cartesian = seriesModel.coordinateSystem as Cartesian2D; - const coordLayout = cartesian.grid.getRect(); + const coordLayout = cartesian.master.getRect(); const baseAxis = cartesian.getBaseAxis(); const valueAxis = cartesian.getOtherAxis(baseAxis); const valueDim = data.mapDimension(valueAxis.dim); diff --git a/src/util/states.ts b/src/util/states.ts index 4c676f34b612eeac4f57c0f5afeffa5bba9c83d6..e8f8ed365bca57d9d52a2ceb657da2067ed018fc 100644 --- a/src/util/states.ts +++ b/src/util/states.ts @@ -16,6 +16,8 @@ import { import * as colorTool from 'zrender/src/tool/color'; import { EChartsType } from '../echarts'; import List from '../data/List'; +import SeriesModel from '../model/Series'; +import { CoordinateSystemMaster, CoordinateSystem } from '../coord/CoordinateSystem'; // Reserve 0 as default. export let _highlightNextDigit = 1; @@ -315,11 +317,25 @@ export function toggleSeriesBlurStates( } } + const targetSeriesModel = model.getSeriesByIndex(targetSeriesIndex); + let targetCoordSys: CoordinateSystemMaster | CoordinateSystem = targetSeriesModel.coordinateSystem; + if (targetCoordSys && (targetCoordSys as CoordinateSystem).master) { + targetCoordSys = (targetCoordSys as CoordinateSystem).master; + } + model.eachSeries(function (seriesModel) { - const sameSeries = targetSeriesIndex === seriesModel.seriesIndex; + const sameSeries = targetSeriesModel === seriesModel; + let coordSys: CoordinateSystemMaster | CoordinateSystem = seriesModel.coordinateSystem; + if (coordSys && (coordSys as CoordinateSystem).master) { + coordSys = (coordSys as CoordinateSystem).master; + } if (!( - blurScope === 'series' && !sameSeries // Not blur other series if blurScope series - || focus === 'series' && sameSeries // Not blur self series if focus is series. + // Not blur other series if blurScope series + blurScope === 'series' && !sameSeries + // Not blur other coordinate system if blurScope is coordinateSystem + || blurScope === 'coordinateSystem' && !(coordSys && targetCoordSys && coordSys === targetCoordSys) + // Not blur self series if focus is series. + || focus === 'series' && sameSeries // TODO blurScope: coordinate system )) { const view = ecIns.getViewOfSeriesModel(seriesModel); diff --git a/test/hoverFocus2.html b/test/hoverFocus2.html new file mode 100644 index 0000000000000000000000000000000000000000..8eeac1da193e7da1851172fb80b66e26e5c323cc --- /dev/null +++ b/test/hoverFocus2.html @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + +