@visactor/vchart 2.0.5-alpha.8 → 2.0.5-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/es5/index.js +1 -1
- package/build/index.es.js +106 -5
- package/build/index.js +106 -5
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/component/crosshair/base.d.ts +5 -0
- package/cjs/component/crosshair/base.js +49 -6
- package/cjs/component/crosshair/base.js.map +1 -1
- package/esm/component/crosshair/base.d.ts +5 -0
- package/esm/component/crosshair/base.js +49 -6
- package/esm/component/crosshair/base.js.map +1 -1
- package/package.json +3 -3
|
@@ -21,6 +21,7 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
|
|
|
21
21
|
private _clickLock?;
|
|
22
22
|
private _hasActive?;
|
|
23
23
|
private _onlyLockClick?;
|
|
24
|
+
private _pendingRenderAfterRendering?;
|
|
24
25
|
get enableRemain(): boolean;
|
|
25
26
|
private _limitBounds;
|
|
26
27
|
constructor(spec: T, options: IComponentOption);
|
|
@@ -65,6 +66,9 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
|
|
|
65
66
|
private _handleTooltipShow;
|
|
66
67
|
private _handleTooltipHideOrRelease;
|
|
67
68
|
private _renderNextFrame;
|
|
69
|
+
private _renderStage;
|
|
70
|
+
private _isTransparentExternalCanvasStage;
|
|
71
|
+
private _clearPreviousComponents;
|
|
68
72
|
protected _getAxisInfoByField<T = IAxis>(field: 'x' | 'y' | 'category' | 'value'): IAxisInfo<T>;
|
|
69
73
|
onLayoutEnd(): void;
|
|
70
74
|
protected _releaseEvent(): void;
|
|
@@ -77,4 +81,5 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
|
|
|
77
81
|
protected _hideByField(field: string): void;
|
|
78
82
|
hide(): void;
|
|
79
83
|
protected _getNeedClearVRenderComponents(): IGraphic[];
|
|
84
|
+
private _getNeedClearVRenderComponentBounds;
|
|
80
85
|
}
|
|
@@ -50,13 +50,14 @@ class BaseCrossHair extends base_component_1.BaseComponent {
|
|
|
50
50
|
const tooltipData = params.tooltipData;
|
|
51
51
|
if (params.isEmptyTooltip || !tooltipData || !tooltipData.length) return void this._handleTooltipHideOrRelease();
|
|
52
52
|
if ((0, vutils_1.isObject)(this._spec.followTooltip) && !1 === this._spec.followTooltip[params.activeType]) return void this._handleTooltipHideOrRelease();
|
|
53
|
-
const {x: x, y: y} = this.calculateTriggerPoint(params);
|
|
53
|
+
const prevComponentBounds = this._getNeedClearVRenderComponentBounds(), {x: x, y: y} = this.calculateTriggerPoint(params);
|
|
54
54
|
this.showDefault = !1, this._layoutCrosshair(x, y, tooltipData, params.activeType);
|
|
55
55
|
const components = this._getNeedClearVRenderComponents();
|
|
56
56
|
this._hasActive = components.some((comp => comp && !1 !== comp.attribute.visible)),
|
|
57
|
-
this._renderNextFrame();
|
|
57
|
+
this._renderNextFrame(prevComponentBounds);
|
|
58
58
|
}, this._handleTooltipHideOrRelease = () => {
|
|
59
|
-
|
|
59
|
+
const prevComponentBounds = this._getNeedClearVRenderComponentBounds();
|
|
60
|
+
this.clearOutEvent(), this.hideCrosshair(), this._renderNextFrame(prevComponentBounds);
|
|
60
61
|
}, this.enable = !0, this.showDefault = !0;
|
|
61
62
|
}
|
|
62
63
|
_setAllAxisValues(axisMap, point, field) {
|
|
@@ -207,9 +208,39 @@ class BaseCrossHair extends base_component_1.BaseComponent {
|
|
|
207
208
|
source: event_1.Event_Source_Type.chart
|
|
208
209
|
}, this._handleTooltipHideOrRelease);
|
|
209
210
|
}
|
|
210
|
-
_renderNextFrame() {
|
|
211
|
-
var _a
|
|
212
|
-
|
|
211
|
+
_renderNextFrame(prevComponentBounds) {
|
|
212
|
+
var _a;
|
|
213
|
+
const stage = this._option.globalInstance.getStage();
|
|
214
|
+
if (stage) return "rendering" === stage.state ? (null === (_a = stage.renderNextFrame) || void 0 === _a || _a.call(stage),
|
|
215
|
+
void (this._pendingRenderAfterRendering || (this._pendingRenderAfterRendering = !0,
|
|
216
|
+
Promise.resolve().then((() => {
|
|
217
|
+
var _a;
|
|
218
|
+
this._pendingRenderAfterRendering = !1, "released" !== stage.releaseStatus && ("rendering" !== stage.state ? this._renderStage(stage, prevComponentBounds) : null === (_a = stage.renderNextFrame) || void 0 === _a || _a.call(stage));
|
|
219
|
+
}))))) : void this._renderStage(stage, prevComponentBounds);
|
|
220
|
+
}
|
|
221
|
+
_renderStage(stage, prevComponentBounds) {
|
|
222
|
+
var _a;
|
|
223
|
+
const shouldRenderExternalCanvas = this._isTransparentExternalCanvasStage(stage), cleared = this._clearPreviousComponents(stage, prevComponentBounds);
|
|
224
|
+
(shouldRenderExternalCanvas || cleared) && "_story_needRender" in stage && (stage._story_needRender = !0),
|
|
225
|
+
stage.render ? stage.render() : null === (_a = stage.renderNextFrame) || void 0 === _a || _a.call(stage);
|
|
226
|
+
}
|
|
227
|
+
_isTransparentExternalCanvasStage(stage) {
|
|
228
|
+
var _a;
|
|
229
|
+
return !1 === (null == stage ? void 0 : stage.background) && !1 === (null === (_a = stage.params) || void 0 === _a ? void 0 : _a.canvasControled);
|
|
230
|
+
}
|
|
231
|
+
_clearPreviousComponents(stage, prevComponentBounds) {
|
|
232
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
233
|
+
if (!(null == prevComponentBounds ? void 0 : prevComponentBounds.length) || !this._isTransparentExternalCanvasStage(stage)) return !1;
|
|
234
|
+
const context = null === (_b = null === (_a = stage.window) || void 0 === _a ? void 0 : _a.getContext) || void 0 === _b ? void 0 : _b.call(_a), nativeContext = null == context ? void 0 : context.nativeContext, matrix = null === (_d = null === (_c = stage.window) || void 0 === _c ? void 0 : _c.getViewBoxTransform) || void 0 === _d ? void 0 : _d.call(_c);
|
|
235
|
+
if (!(nativeContext && matrix && nativeContext.save && nativeContext.setTransform && nativeContext.clearRect && nativeContext.restore)) return !1;
|
|
236
|
+
const dpr = null !== (_g = null !== (_f = null === (_e = stage.window) || void 0 === _e ? void 0 : _e.dpr) && void 0 !== _f ? _f : context.dpr) && void 0 !== _g ? _g : 1, transformPoint = (x, y) => ({
|
|
237
|
+
x: matrix.a * x + matrix.c * y + matrix.e,
|
|
238
|
+
y: matrix.b * x + matrix.d * y + matrix.f
|
|
239
|
+
});
|
|
240
|
+
return nativeContext.save(), nativeContext.setTransform(dpr, 0, 0, dpr, 0, 0), prevComponentBounds.forEach((bounds => {
|
|
241
|
+
const p1 = transformPoint(bounds.x1, bounds.y1), p2 = transformPoint(bounds.x1, bounds.y2), p3 = transformPoint(bounds.x2, bounds.y1), p4 = transformPoint(bounds.x2, bounds.y2), x1 = Math.min(p1.x, p2.x, p3.x, p4.x) - 8, y1 = Math.min(p1.y, p2.y, p3.y, p4.y) - 8, x2 = Math.max(p1.x, p2.x, p3.x, p4.x) + 8, y2 = Math.max(p1.y, p2.y, p3.y, p4.y) + 8;
|
|
242
|
+
nativeContext.clearRect(x1, y1, x2 - x1, y2 - y1);
|
|
243
|
+
})), nativeContext.restore(), !0;
|
|
213
244
|
}
|
|
214
245
|
_getAxisInfoByField(field) {
|
|
215
246
|
var _a, _b;
|
|
@@ -381,6 +412,18 @@ class BaseCrossHair extends base_component_1.BaseComponent {
|
|
|
381
412
|
})), res;
|
|
382
413
|
}), []);
|
|
383
414
|
}
|
|
415
|
+
_getNeedClearVRenderComponentBounds() {
|
|
416
|
+
return this._getNeedClearVRenderComponents().reduce(((bounds, component) => {
|
|
417
|
+
if (!component || !1 === component.attribute.visible) return bounds;
|
|
418
|
+
const componentBounds = component.globalAABBBounds;
|
|
419
|
+
return componentBounds && Number.isFinite(componentBounds.x1) && Number.isFinite(componentBounds.y1) && Number.isFinite(componentBounds.x2) && Number.isFinite(componentBounds.y2) && bounds.push({
|
|
420
|
+
x1: componentBounds.x1,
|
|
421
|
+
y1: componentBounds.y1,
|
|
422
|
+
x2: componentBounds.x2,
|
|
423
|
+
y2: componentBounds.y2
|
|
424
|
+
}), bounds;
|
|
425
|
+
}), []);
|
|
426
|
+
}
|
|
384
427
|
}
|
|
385
428
|
|
|
386
429
|
exports.BaseCrossHair = BaseCrossHair, BaseCrossHair.specKey = "crosshair";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport { Tag } from '@visactor/vrender-components';\nimport type { IGraphic, INode } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { throttle, PointService, isEqual, isArray, isNumber, get, isBoolean, isObject, array } from '@visactor/vutils';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport type { BaseEventParams, EventType } from '../../event/interface';\nimport type { IModelLayoutOption, IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { IPoint, Maybe, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';\nimport { outOfBounds } from '../../util/math';\nimport type { IComponentOption } from '../interface';\nimport type {\n ICrossHair,\n CrossHairTrigger,\n ICartesianCrosshairSpec,\n IPolarCrosshairSpec,\n ICrosshairCategoryFieldSpec,\n IAxisInfo,\n CrossHairStateByField\n} from './interface';\nimport { ChartEvent, Event_Bubble_Level, Event_Source_Type } from '../../constant/event';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { getDefaultCrosshairTriggerEventByMode } from './config';\nimport type { IPolarAxis } from '../axis/polar/interface';\nimport type { IAxis } from '../axis/interface';\nimport type { TooltipEventParams } from '../tooltip/interface/event';\nimport { limitTagInBounds } from './utils/common';\nimport { isDiscrete } from '@visactor/vscale';\n\nconst ORIENT_MAP = {\n x: ['top', 'bottom'],\n y: ['left', 'right'],\n category: ['angle'],\n value: ['radius']\n};\n\nexport abstract class BaseCrossHair<T extends ICartesianCrosshairSpec | IPolarCrosshairSpec>\n extends BaseComponent<T>\n implements ICrossHair\n{\n static specKey = 'crosshair';\n specKey = 'crosshair';\n\n layoutType: 'none' = 'none';\n gridZIndex: number = LayoutZIndex.CrossHair_Grid;\n labelZIndex: number = LayoutZIndex.CrossHair;\n trigger: CrossHairTrigger = 'hover';\n enable: boolean;\n showDefault: boolean;\n triggerOff: 'none' | number; // 为none则不消失\n\n protected _stateByField!: CrossHairStateByField;\n\n private _timer?: number;\n private _clickLock?: boolean;\n private _hasActive?: boolean;\n private _onlyLockClick?: boolean;\n\n get enableRemain(): boolean {\n return this.triggerOff === 'none';\n }\n\n private _limitBounds: Maybe<IBoundsLike>;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this.enable = true;\n this.showDefault = true;\n }\n\n protected abstract _layoutCrosshair(\n x: number,\n y: number,\n tooltipData?: TooltipData,\n activeType?: TooltipActiveType\n ): void;\n\n abstract setAxisValue(v: StringOrNumber, axis: IAxis): void;\n abstract layoutByValue(enableRemain?: boolean): void;\n protected abstract _getDatumAtPoint(axis: IAxis, point: IPoint): number | string;\n\n /**\n * 根据位置获取所有轴上的value\n * @param axisMap\n * @param p\n * @returns\n */\n protected _setAllAxisValues(axisMap: IAxisInfo<IAxis>, point: IPoint, field: string): boolean {\n // 首先不能存在两个离散轴\n let discrete = false;\n axisMap.forEach(item => {\n if (isDiscrete(item.axis.getScale().type)) {\n if (!discrete) {\n discrete = true;\n } else {\n this.enable = false;\n }\n }\n });\n if (!this.enable) {\n return false;\n }\n const { currentValue } = this._stateByField[field];\n // 获取所有的value\n axisMap.forEach((item, id) => {\n const axis = item.axis;\n currentValue.set(id, {\n datum: this._getDatumAtPoint(axis, point),\n axis\n });\n });\n return true;\n }\n /**\n * clear axis value of crosshair\n */\n clearAxisValue() {\n Object.keys(this._stateByField).forEach(field => {\n this._stateByField[field].currentValue.clear();\n });\n }\n\n hideCrosshair() {\n this.clearAxisValue();\n this.hide();\n }\n\n showCrosshair(dimInfo: { axis: IAxis; value: string | number }[]) {\n if (!dimInfo || !dimInfo.length) {\n return;\n }\n\n this.showDefault = false;\n this.clearAxisValue();\n dimInfo.forEach((d: { axis: IAxis; value: string | number }) => {\n const { axis, value } = d;\n this.setAxisValue(value, axis);\n });\n this.layoutByValue(false);\n }\n\n protected _getLimitBounds() {\n if (!this._limitBounds) {\n const { width, height } = this._option.globalInstance.getChart()?.getViewRect() ?? {\n width: 0,\n height: 0\n };\n this._limitBounds = {\n x1: 0,\n y1: 0,\n x2: width,\n y2: height\n };\n }\n return this._limitBounds;\n }\n\n protected _showDefaultCrosshairBySpec() {\n let hasDefaultCrosshair = false;\n\n Object.keys(this._stateByField).forEach(field => {\n const fieldSpec = (this._spec as any)[field];\n\n if (fieldSpec && fieldSpec.visible && fieldSpec.defaultSelect) {\n const { axisIndex = 0, datum } = fieldSpec.defaultSelect;\n const axis = this._option.getComponentsByKey('axes').find(c => c.getSpecIndex() === axisIndex) as IAxis;\n\n if (axis) {\n hasDefaultCrosshair = true;\n this._stateByField[field].currentValue.clear();\n this._stateByField[field].currentValue.set(axisIndex, { axis, datum });\n }\n }\n });\n\n return hasDefaultCrosshair;\n }\n\n protected _updateVisibleCrosshair() {\n let hasVisible = false;\n\n Object.keys(this._stateByField).forEach(field => {\n const fieldSpec = (this._spec as any)[field];\n\n if (fieldSpec && fieldSpec.visible && this._stateByField[field].currentValue.size) {\n hasVisible = true;\n } else {\n this._hideByField(field);\n }\n });\n\n if (hasVisible) {\n this.layoutByValue(false);\n }\n }\n\n protected _showDefaultCrosshair() {\n if (this.showDefault) {\n const hasDefault = this._showDefaultCrosshairBySpec();\n hasDefault && this.layoutByValue(false);\n } else {\n this._updateVisibleCrosshair();\n }\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._parseCrosshairSpec();\n }\n\n created() {\n super.created();\n // event\n this._initEvent();\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake && !isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n protected _initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n\n if (this._spec.followTooltip) {\n this._registerTooltipEvent();\n } else {\n const triggerConfig = this._getTriggerEvent();\n\n if (triggerConfig) {\n triggerConfig.forEach(cfg => {\n this._registerEvent(cfg.in, false, cfg.click);\n cfg.out && this._registerEvent(cfg.out, true);\n });\n }\n }\n }\n\n private _registerEvent(eventName: EventType | EventType[], isOut?: boolean, click?: boolean) {\n const handler = isOut ? this._handleOutEvent : click ? this._handleClickInEvent : this._handleHoverInEvent;\n const cfg = isOut ? { level: Event_Bubble_Level.chart } : { source: Event_Source_Type.chart };\n\n if (isArray(eventName)) {\n (eventName as EventType[]).forEach(evt => {\n this.event.on(evt, cfg, handler);\n });\n } else {\n this.event.on(eventName as EventType, cfg, handler);\n }\n }\n\n private _eventOff(eventName: EventType | EventType[], isOut?: boolean, click?: boolean) {\n const handler = isOut ? this._handleOutEvent : click ? this._handleClickInEvent : this._handleHoverInEvent;\n if (isArray(eventName)) {\n (eventName as EventType[]).forEach(evt => {\n this.event.off(evt, handler);\n });\n } else {\n this.event.off(eventName as EventType, handler);\n }\n }\n\n onBeforeRender(): void {\n this._limitBounds = null;\n this._showDefaultCrosshair();\n }\n\n protected calculateTriggerPoint(params: any) {\n const { event } = params as BaseEventParams;\n // compute layer offset\n const layer = this._option.getCompiler().getStage().getLayer(undefined);\n const point = { x: event.viewX, y: event.viewY };\n layer.globalTransMatrix.transformPoint({ x: event.viewX, y: event.viewY }, point);\n\n return {\n x: point.x - this.getLayoutStartPoint().x,\n y: point.y - this.getLayoutStartPoint().y\n };\n }\n\n private _handleIn = (params: any) => {\n if (!this._option) {\n return;\n }\n\n const { x, y } = this.calculateTriggerPoint(params);\n this.showDefault = false;\n this._layoutCrosshair(x, y);\n\n const components = this._getNeedClearVRenderComponents();\n this._hasActive = components.some(comp => comp && comp.attribute.visible !== false);\n };\n\n private _handleClickInEvent = (params: any) => {\n if (this._hasActive && this._spec.lockAfterClick && !this._clickLock) {\n this._clickLock = true;\n return;\n } else if (this._clickLock) {\n this._clickLock = false;\n this._handleOutEvent();\n return;\n }\n\n if (this._onlyLockClick) {\n return;\n }\n\n this._handleIn(params);\n\n if (isNumber(this.triggerOff)) {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timer = setTimeout(() => {\n this._handleOutEvent();\n }, this.triggerOff as number) as unknown as number;\n }\n };\n\n private _handleHoverInEvent = throttle((params: any) => {\n if (this._clickLock) {\n return;\n }\n\n this._handleIn(params);\n }, 10);\n\n private _handleOutEvent = () => {\n if (this.enableRemain || this._clickLock || !this._hasActive) {\n return;\n }\n this.clearOutEvent();\n\n this.hideCrosshair();\n };\n\n private _getTriggerEvent() {\n const { mode = RenderModeEnum['desktop-browser'] } = this._option;\n const triggerConfig = getDefaultCrosshairTriggerEventByMode(mode);\n if (triggerConfig) {\n const trigger: string[] = array(this.trigger || 'hover');\n const outTrigger = (inTrigger: CrossHairTrigger) => {\n if (inTrigger === 'click') {\n return this.triggerOff === 'none' ? null : triggerConfig.clickOut;\n }\n return triggerConfig.hoverOut;\n };\n\n if (this._spec.lockAfterClick && !trigger.includes('click')) {\n trigger.push('click');\n this._onlyLockClick = true;\n } else {\n this._onlyLockClick = false;\n }\n // 同时配置了多个触发事件\n const res: { in: EventType | EventType[]; out: EventType | EventType[]; click: boolean }[] = [];\n (trigger as ['click', 'hover']).forEach(item => {\n res.push({\n click: item === 'click',\n in: triggerConfig[item],\n out: outTrigger(item)\n });\n });\n return res;\n }\n return null;\n }\n\n private _registerTooltipEvent() {\n this.event.on(ChartEvent.tooltipHide, { source: Event_Source_Type.chart }, this._handleTooltipHideOrRelease);\n this.event.on(ChartEvent.tooltipShow, { source: Event_Source_Type.chart }, this._handleTooltipShow);\n this.event.on(ChartEvent.tooltipRelease, { source: Event_Source_Type.chart }, this._handleTooltipHideOrRelease);\n }\n\n private _handleTooltipShow = (params: TooltipEventParams) => {\n const tooltipData = params.tooltipData;\n\n if (params.isEmptyTooltip || !tooltipData || !tooltipData.length) {\n this._handleTooltipHideOrRelease();\n return;\n }\n\n if (isObject(this._spec.followTooltip)) {\n if (this._spec.followTooltip[params.activeType] === false) {\n this._handleTooltipHideOrRelease();\n return;\n }\n }\n\n const { x, y } = this.calculateTriggerPoint(params);\n this.showDefault = false;\n this._layoutCrosshair(x, y, tooltipData, params.activeType);\n\n const components = this._getNeedClearVRenderComponents();\n this._hasActive = components.some(comp => comp && comp.attribute.visible !== false);\n this._renderNextFrame();\n };\n\n private _handleTooltipHideOrRelease = () => {\n this.clearOutEvent();\n\n this.hideCrosshair();\n this._renderNextFrame();\n };\n\n private _renderNextFrame() {\n (this._option.globalInstance.getStage() as any)?.renderNextFrame?.();\n }\n\n protected _getAxisInfoByField<T = IAxis>(field: 'x' | 'y' | 'category' | 'value') {\n // 加判空防止某些特殊时刻(如 updateSpec 时)鼠标滑过图表导致报错\n const axesComponents = this._option.getComponentsByKey?.('axes') as IAxis[];\n if (!axesComponents?.length) {\n return null;\n }\n let bindingAxesIndex: number[] = get(this._spec, `${field}Field.bindingAxesIndex`);\n if (!bindingAxesIndex) {\n bindingAxesIndex = [];\n axesComponents.forEach((item, index) => {\n if (ORIENT_MAP[field].includes(item.getOrient())) {\n bindingAxesIndex.push(index);\n }\n });\n }\n if (!bindingAxesIndex.length) {\n return null;\n }\n\n const map: IAxisInfo<T> = new Map();\n let x1 = Infinity;\n let y1 = Infinity;\n let x2 = -Infinity;\n let y2 = -Infinity;\n const { x: sx, y: sy } = this.getLayoutStartPoint();\n bindingAxesIndex.forEach(idx => {\n (x1 = Infinity), (y1 = Infinity), (x2 = -Infinity), (y2 = -Infinity);\n const axis = axesComponents.find(axis => axis.getSpecIndex() === idx);\n if (!axis) {\n return;\n }\n const innerOffset = (axis as any).getInnerOffset?.() || { left: 0, right: 0, top: 0, bottom: 0 };\n const regions = axis.getRegions();\n regions.forEach(r => {\n const { x: regionStartX, y: regionStartY } = r.getLayoutStartPoint();\n x1 = Math.min(x1, regionStartX - sx + innerOffset.left);\n y1 = Math.min(y1, regionStartY - sy + innerOffset.top);\n x2 = Math.max(x2, regionStartX + r.getLayoutRect().width - sx - innerOffset.right);\n y2 = Math.max(y2, regionStartY + r.getLayoutRect().height - sy - innerOffset.bottom);\n });\n map.set(idx, { x1, y1, x2, y2, axis: axis as unknown as T });\n });\n\n return map;\n }\n\n onLayoutEnd(): void {\n const region = this._regions[0];\n this.setLayoutRect(region.getLayoutRect());\n this.setLayoutStartPosition(region.getLayoutStartPoint());\n\n super.onLayoutEnd();\n }\n\n protected _releaseEvent(): void {\n this.clearOutEvent();\n\n const triggerConfig = this._getTriggerEvent();\n if (triggerConfig) {\n triggerConfig.forEach(cfg => {\n this._eventOff(cfg.in, false, cfg.click);\n cfg.out && this._eventOff(cfg.out, true);\n });\n }\n }\n\n protected _parseFieldInfo() {\n Object.keys(this._stateByField).forEach(field => {\n const fieldSpec = (this._spec as any)[field];\n const { crosshairComp } = this._stateByField[field];\n\n if (fieldSpec && fieldSpec.visible) {\n this._stateByField[field].attributes = this._parseField(fieldSpec, field);\n\n if (crosshairComp) {\n const { style, type } = this._stateByField[field].attributes;\n const styleKey = type === 'rect' ? 'rectStyle' : 'lineStyle';\n\n crosshairComp.setAttributes({\n [styleKey]: style\n });\n }\n } else if (crosshairComp && crosshairComp.parent) {\n crosshairComp.parent.removeChild(crosshairComp);\n }\n });\n }\n\n protected _parseCrosshairSpec() {\n this._parseFieldInfo();\n\n const { trigger, triggerOff, labelZIndex, gridZIndex } = this._spec;\n if (trigger) {\n this.trigger = trigger;\n }\n if (triggerOff === 'none' || (isNumber(triggerOff) && triggerOff > 0)) {\n this.triggerOff = triggerOff;\n }\n if (labelZIndex !== undefined) {\n this.labelZIndex = labelZIndex;\n }\n if (gridZIndex !== undefined) {\n this.gridZIndex = gridZIndex;\n }\n }\n\n protected _parseField(field: ICrosshairCategoryFieldSpec, fieldName: string) {\n const hair = {} as any;\n const { line = {}, label = {}, visible } = field;\n\n hair.visible = visible;\n hair.type = line.type || 'line';\n\n if (line.visible === false) {\n hair.style = { visible: false };\n } else {\n const style = line.style || {};\n const { stroke, fill, lineWidth } = style as any;\n const { strokeOpacity, fillOpacity, opacity, ...restStyle } = style as any;\n const isLineType = hair.type === 'line';\n let finalOpacity = isLineType ? strokeOpacity : fillOpacity;\n if (isNumber(opacity)) {\n // FIXME: 之前的兼容逻辑,去掉可能会影响现有 crosshair 的展示效果\n finalOpacity = (finalOpacity ?? 1) * opacity;\n }\n hair.style = {\n opacity: finalOpacity,\n pickable: false,\n visible: true,\n ...restStyle\n };\n\n if (isLineType) {\n hair.style.stroke = stroke || fill;\n hair.style.lineWidth = get(line, 'width', lineWidth || 2);\n } else {\n hair.style.fill = fill || stroke;\n if (field?.line?.style?.stroke) {\n hair.style.stroke = field.line.style.stroke;\n }\n const rectSize = get(line, 'width');\n if (typeof rectSize === 'string') {\n const percent = parseInt(rectSize.substring(0, rectSize.length - 1), 10) / 100;\n hair.style.sizePercent = percent;\n } else if (typeof rectSize === 'number' || typeof rectSize === 'function') {\n hair.style.size = rectSize;\n }\n }\n }\n\n if (!!label.visible) {\n const labelBackground = label.labelBackground || {};\n const syncAxisLabelAngle = label.syncAxisLabelAngle ?? false;\n const labelStyle = label.style || {};\n const {\n fill: rectFill = 'rgba(47, 59, 82, 0.9)',\n stroke: rectStroke,\n outerBorder,\n ...rectStyle\n } = labelBackground.style || {};\n hair.label = {\n visible: true,\n formatMethod: label.formatMethod,\n formatter: label.formatter,\n minWidth: labelBackground.minWidth,\n maxWidth: labelBackground.maxWidth,\n padding: labelBackground.padding,\n syncAxisLabelAngle,\n textStyle: {\n fontSize: 14,\n pickable: false,\n ...labelStyle,\n fill: labelStyle.fill || '#fff',\n stroke: get(labelStyle, 'stroke')\n },\n panel: (isBoolean(labelBackground.visible) ? labelBackground.visible : !!labelBackground)\n ? {\n visible: true,\n pickable: false,\n fill: rectFill,\n stroke: rectStroke,\n // Note: 通过这个配置可以保证 label 和 轴 label 对齐\n outerBorder: {\n stroke: rectFill,\n distance: 0,\n lineWidth: 3,\n ...outerBorder\n },\n ...rectStyle\n }\n : { visible: false },\n zIndex: this.labelZIndex,\n childrenPickable: false,\n pickable: false\n };\n } else {\n hair.label = { visible: false };\n }\n\n return hair;\n }\n\n protected _filterAxisByPoint<T>(axisMap: IAxisInfo<T>, relativeX: number, relativeY: number) {\n axisMap &&\n axisMap.forEach(item => {\n const axis = item.axis as unknown as IAxis | IPolarAxis;\n if (outOfBounds(item, relativeX, relativeY)) {\n axisMap.delete(axis.getSpecIndex());\n }\n if ((axis as IPolarAxis).type.startsWith('polarAxis')) {\n // 极坐标下需要判断是否在半径内\n const center = (axis as IPolarAxis).getCenter();\n const innerRadius = (axis as IPolarAxis).getInnerRadius();\n const outerRadius = (axis as IPolarAxis).getOuterRadius();\n const distance = PointService.distancePP({ x: relativeX, y: relativeY }, center);\n if (distance > outerRadius || distance < innerRadius) {\n axisMap.delete((axis as IPolarAxis).getSpecIndex());\n }\n }\n });\n return axisMap;\n }\n\n protected _updateCrosshairLabel(label: Tag, labelAttrs: any, callback: (label: Tag) => void) {\n // 文本\n const container = this.getContainer();\n if (label) {\n label.setAttributes(labelAttrs);\n } else {\n label = new Tag(labelAttrs);\n container?.add(label as unknown as INode);\n callback(label);\n }\n limitTagInBounds(label, this._getLimitBounds());\n }\n\n protected clearOutEvent() {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n if (this._clickLock) {\n this._clickLock = null;\n }\n\n if (this._hasActive) {\n this._hasActive = null;\n }\n }\n\n protected _hideByField(field: string) {\n const { crosshairComp, labelsComp } = this._stateByField[field];\n\n crosshairComp && crosshairComp.hideAll();\n\n if (labelsComp) {\n Object.keys(labelsComp).forEach(key => {\n labelsComp[key] && labelsComp[key].hideAll();\n });\n }\n }\n\n hide() {\n // 隐藏\n Object.keys(this._stateByField).forEach(field => {\n this._hideByField(field);\n });\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return Object.keys(this._stateByField).reduce((res, field) => {\n const { crosshairComp, labelsComp } = this._stateByField[field];\n\n if (crosshairComp) {\n res.push(crosshairComp);\n }\n\n if (labelsComp) {\n Object.keys(labelsComp).forEach(key => {\n labelsComp[key] && res.push(labelsComp[key]);\n });\n }\n return res;\n }, []);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/crosshair/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport { Tag } from '@visactor/vrender-components';\nimport type { IGraphic, INode } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { throttle, PointService, isEqual, isArray, isNumber, get, isBoolean, isObject, array } from '@visactor/vutils';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport type { BaseEventParams, EventType } from '../../event/interface';\nimport type { IModelLayoutOption, IModelRenderOption } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport { BaseComponent } from '../base/base-component';\nimport type { IPoint, Maybe, StringOrNumber, TooltipActiveType, TooltipData } from '../../typings';\nimport { outOfBounds } from '../../util/math';\nimport type { IComponentOption } from '../interface';\nimport type {\n ICrossHair,\n CrossHairTrigger,\n ICartesianCrosshairSpec,\n IPolarCrosshairSpec,\n ICrosshairCategoryFieldSpec,\n IAxisInfo,\n CrossHairStateByField\n} from './interface';\nimport { ChartEvent, Event_Bubble_Level, Event_Source_Type } from '../../constant/event';\nimport { LayoutZIndex } from '../../constant/layout';\nimport { getDefaultCrosshairTriggerEventByMode } from './config';\nimport type { IPolarAxis } from '../axis/polar/interface';\nimport type { IAxis } from '../axis/interface';\nimport type { TooltipEventParams } from '../tooltip/interface/event';\nimport { limitTagInBounds } from './utils/common';\nimport { isDiscrete } from '@visactor/vscale';\n\nconst ORIENT_MAP = {\n x: ['top', 'bottom'],\n y: ['left', 'right'],\n category: ['angle'],\n value: ['radius']\n};\n\nexport abstract class BaseCrossHair<T extends ICartesianCrosshairSpec | IPolarCrosshairSpec>\n extends BaseComponent<T>\n implements ICrossHair\n{\n static specKey = 'crosshair';\n specKey = 'crosshair';\n\n layoutType: 'none' = 'none';\n gridZIndex: number = LayoutZIndex.CrossHair_Grid;\n labelZIndex: number = LayoutZIndex.CrossHair;\n trigger: CrossHairTrigger = 'hover';\n enable: boolean;\n showDefault: boolean;\n triggerOff: 'none' | number; // 为none则不消失\n\n protected _stateByField!: CrossHairStateByField;\n\n private _timer?: number;\n private _clickLock?: boolean;\n private _hasActive?: boolean;\n private _onlyLockClick?: boolean;\n private _pendingRenderAfterRendering?: boolean;\n\n get enableRemain(): boolean {\n return this.triggerOff === 'none';\n }\n\n private _limitBounds: Maybe<IBoundsLike>;\n\n constructor(spec: T, options: IComponentOption) {\n super(spec, options);\n this.enable = true;\n this.showDefault = true;\n }\n\n protected abstract _layoutCrosshair(\n x: number,\n y: number,\n tooltipData?: TooltipData,\n activeType?: TooltipActiveType\n ): void;\n\n abstract setAxisValue(v: StringOrNumber, axis: IAxis): void;\n abstract layoutByValue(enableRemain?: boolean): void;\n protected abstract _getDatumAtPoint(axis: IAxis, point: IPoint): number | string;\n\n /**\n * 根据位置获取所有轴上的value\n * @param axisMap\n * @param p\n * @returns\n */\n protected _setAllAxisValues(axisMap: IAxisInfo<IAxis>, point: IPoint, field: string): boolean {\n // 首先不能存在两个离散轴\n let discrete = false;\n axisMap.forEach(item => {\n if (isDiscrete(item.axis.getScale().type)) {\n if (!discrete) {\n discrete = true;\n } else {\n this.enable = false;\n }\n }\n });\n if (!this.enable) {\n return false;\n }\n const { currentValue } = this._stateByField[field];\n // 获取所有的value\n axisMap.forEach((item, id) => {\n const axis = item.axis;\n currentValue.set(id, {\n datum: this._getDatumAtPoint(axis, point),\n axis\n });\n });\n return true;\n }\n /**\n * clear axis value of crosshair\n */\n clearAxisValue() {\n Object.keys(this._stateByField).forEach(field => {\n this._stateByField[field].currentValue.clear();\n });\n }\n\n hideCrosshair() {\n this.clearAxisValue();\n this.hide();\n }\n\n showCrosshair(dimInfo: { axis: IAxis; value: string | number }[]) {\n if (!dimInfo || !dimInfo.length) {\n return;\n }\n\n this.showDefault = false;\n this.clearAxisValue();\n dimInfo.forEach((d: { axis: IAxis; value: string | number }) => {\n const { axis, value } = d;\n this.setAxisValue(value, axis);\n });\n this.layoutByValue(false);\n }\n\n protected _getLimitBounds() {\n if (!this._limitBounds) {\n const { width, height } = this._option.globalInstance.getChart()?.getViewRect() ?? {\n width: 0,\n height: 0\n };\n this._limitBounds = {\n x1: 0,\n y1: 0,\n x2: width,\n y2: height\n };\n }\n return this._limitBounds;\n }\n\n protected _showDefaultCrosshairBySpec() {\n let hasDefaultCrosshair = false;\n\n Object.keys(this._stateByField).forEach(field => {\n const fieldSpec = (this._spec as any)[field];\n\n if (fieldSpec && fieldSpec.visible && fieldSpec.defaultSelect) {\n const { axisIndex = 0, datum } = fieldSpec.defaultSelect;\n const axis = this._option.getComponentsByKey('axes').find(c => c.getSpecIndex() === axisIndex) as IAxis;\n\n if (axis) {\n hasDefaultCrosshair = true;\n this._stateByField[field].currentValue.clear();\n this._stateByField[field].currentValue.set(axisIndex, { axis, datum });\n }\n }\n });\n\n return hasDefaultCrosshair;\n }\n\n protected _updateVisibleCrosshair() {\n let hasVisible = false;\n\n Object.keys(this._stateByField).forEach(field => {\n const fieldSpec = (this._spec as any)[field];\n\n if (fieldSpec && fieldSpec.visible && this._stateByField[field].currentValue.size) {\n hasVisible = true;\n } else {\n this._hideByField(field);\n }\n });\n\n if (hasVisible) {\n this.layoutByValue(false);\n }\n }\n\n protected _showDefaultCrosshair() {\n if (this.showDefault) {\n const hasDefault = this._showDefaultCrosshairBySpec();\n hasDefault && this.layoutByValue(false);\n } else {\n this._updateVisibleCrosshair();\n }\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._parseCrosshairSpec();\n }\n\n created() {\n super.created();\n // event\n this._initEvent();\n }\n\n /**\n * updateSpec\n */\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!result.reMake && !isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n protected _initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n\n if (this._spec.followTooltip) {\n this._registerTooltipEvent();\n } else {\n const triggerConfig = this._getTriggerEvent();\n\n if (triggerConfig) {\n triggerConfig.forEach(cfg => {\n this._registerEvent(cfg.in, false, cfg.click);\n cfg.out && this._registerEvent(cfg.out, true);\n });\n }\n }\n }\n\n private _registerEvent(eventName: EventType | EventType[], isOut?: boolean, click?: boolean) {\n const handler = isOut ? this._handleOutEvent : click ? this._handleClickInEvent : this._handleHoverInEvent;\n const cfg = isOut ? { level: Event_Bubble_Level.chart } : { source: Event_Source_Type.chart };\n\n if (isArray(eventName)) {\n (eventName as EventType[]).forEach(evt => {\n this.event.on(evt, cfg, handler);\n });\n } else {\n this.event.on(eventName as EventType, cfg, handler);\n }\n }\n\n private _eventOff(eventName: EventType | EventType[], isOut?: boolean, click?: boolean) {\n const handler = isOut ? this._handleOutEvent : click ? this._handleClickInEvent : this._handleHoverInEvent;\n if (isArray(eventName)) {\n (eventName as EventType[]).forEach(evt => {\n this.event.off(evt, handler);\n });\n } else {\n this.event.off(eventName as EventType, handler);\n }\n }\n\n onBeforeRender(): void {\n this._limitBounds = null;\n this._showDefaultCrosshair();\n }\n\n protected calculateTriggerPoint(params: any) {\n const { event } = params as BaseEventParams;\n // compute layer offset\n const layer = this._option.getCompiler().getStage().getLayer(undefined);\n const point = { x: event.viewX, y: event.viewY };\n layer.globalTransMatrix.transformPoint({ x: event.viewX, y: event.viewY }, point);\n\n return {\n x: point.x - this.getLayoutStartPoint().x,\n y: point.y - this.getLayoutStartPoint().y\n };\n }\n\n private _handleIn = (params: any) => {\n if (!this._option) {\n return;\n }\n\n const { x, y } = this.calculateTriggerPoint(params);\n this.showDefault = false;\n this._layoutCrosshair(x, y);\n\n const components = this._getNeedClearVRenderComponents();\n this._hasActive = components.some(comp => comp && comp.attribute.visible !== false);\n };\n\n private _handleClickInEvent = (params: any) => {\n if (this._hasActive && this._spec.lockAfterClick && !this._clickLock) {\n this._clickLock = true;\n return;\n } else if (this._clickLock) {\n this._clickLock = false;\n this._handleOutEvent();\n return;\n }\n\n if (this._onlyLockClick) {\n return;\n }\n\n this._handleIn(params);\n\n if (isNumber(this.triggerOff)) {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timer = setTimeout(() => {\n this._handleOutEvent();\n }, this.triggerOff as number) as unknown as number;\n }\n };\n\n private _handleHoverInEvent = throttle((params: any) => {\n if (this._clickLock) {\n return;\n }\n\n this._handleIn(params);\n }, 10);\n\n private _handleOutEvent = () => {\n if (this.enableRemain || this._clickLock || !this._hasActive) {\n return;\n }\n this.clearOutEvent();\n\n this.hideCrosshair();\n };\n\n private _getTriggerEvent() {\n const { mode = RenderModeEnum['desktop-browser'] } = this._option;\n const triggerConfig = getDefaultCrosshairTriggerEventByMode(mode);\n if (triggerConfig) {\n const trigger: string[] = array(this.trigger || 'hover');\n const outTrigger = (inTrigger: CrossHairTrigger) => {\n if (inTrigger === 'click') {\n return this.triggerOff === 'none' ? null : triggerConfig.clickOut;\n }\n return triggerConfig.hoverOut;\n };\n\n if (this._spec.lockAfterClick && !trigger.includes('click')) {\n trigger.push('click');\n this._onlyLockClick = true;\n } else {\n this._onlyLockClick = false;\n }\n // 同时配置了多个触发事件\n const res: { in: EventType | EventType[]; out: EventType | EventType[]; click: boolean }[] = [];\n (trigger as ['click', 'hover']).forEach(item => {\n res.push({\n click: item === 'click',\n in: triggerConfig[item],\n out: outTrigger(item)\n });\n });\n return res;\n }\n return null;\n }\n\n private _registerTooltipEvent() {\n this.event.on(ChartEvent.tooltipHide, { source: Event_Source_Type.chart }, this._handleTooltipHideOrRelease);\n this.event.on(ChartEvent.tooltipShow, { source: Event_Source_Type.chart }, this._handleTooltipShow);\n this.event.on(ChartEvent.tooltipRelease, { source: Event_Source_Type.chart }, this._handleTooltipHideOrRelease);\n }\n\n private _handleTooltipShow = (params: TooltipEventParams) => {\n const tooltipData = params.tooltipData;\n\n if (params.isEmptyTooltip || !tooltipData || !tooltipData.length) {\n this._handleTooltipHideOrRelease();\n return;\n }\n\n if (isObject(this._spec.followTooltip)) {\n if (this._spec.followTooltip[params.activeType] === false) {\n this._handleTooltipHideOrRelease();\n return;\n }\n }\n\n const prevComponentBounds = this._getNeedClearVRenderComponentBounds();\n const { x, y } = this.calculateTriggerPoint(params);\n this.showDefault = false;\n this._layoutCrosshair(x, y, tooltipData, params.activeType);\n\n const components = this._getNeedClearVRenderComponents();\n this._hasActive = components.some(comp => comp && comp.attribute.visible !== false);\n this._renderNextFrame(prevComponentBounds);\n };\n\n private _handleTooltipHideOrRelease = () => {\n const prevComponentBounds = this._getNeedClearVRenderComponentBounds();\n\n this.clearOutEvent();\n\n this.hideCrosshair();\n this._renderNextFrame(prevComponentBounds);\n };\n\n private _renderNextFrame(prevComponentBounds?: IBoundsLike[]) {\n const stage = this._option.globalInstance.getStage() as any;\n\n if (!stage) {\n return;\n }\n\n if (stage.state === 'rendering') {\n stage.renderNextFrame?.();\n if (!this._pendingRenderAfterRendering) {\n this._pendingRenderAfterRendering = true;\n // Nested VRender stages need a normal render after the current pass to repaint the updated crosshair.\n Promise.resolve().then(() => {\n this._pendingRenderAfterRendering = false;\n\n if (stage.releaseStatus === 'released') {\n return;\n }\n\n if (stage.state === 'rendering') {\n stage.renderNextFrame?.();\n return;\n }\n\n this._renderStage(stage, prevComponentBounds);\n });\n }\n return;\n }\n\n this._renderStage(stage, prevComponentBounds);\n }\n\n private _renderStage(stage: any, prevComponentBounds?: IBoundsLike[]) {\n const shouldRenderExternalCanvas = this._isTransparentExternalCanvasStage(stage);\n const cleared = this._clearPreviousComponents(stage, prevComponentBounds);\n\n if ((shouldRenderExternalCanvas || cleared) && '_story_needRender' in stage) {\n // VStory pauses child VChart renders unless the render is initiated by its outer stage.\n stage._story_needRender = true;\n }\n\n if (stage.render) {\n stage.render();\n return;\n }\n\n stage.renderNextFrame?.();\n }\n\n private _isTransparentExternalCanvasStage(stage: any) {\n return stage?.background === false && stage.params?.canvasControled === false;\n }\n\n private _clearPreviousComponents(stage: any, prevComponentBounds?: IBoundsLike[]) {\n if (!prevComponentBounds?.length || !this._isTransparentExternalCanvasStage(stage)) {\n return false;\n }\n\n const context = stage.window?.getContext?.();\n const nativeContext = context?.nativeContext;\n const matrix = stage.window?.getViewBoxTransform?.();\n\n if (\n !nativeContext ||\n !matrix ||\n !nativeContext.save ||\n !nativeContext.setTransform ||\n !nativeContext.clearRect ||\n !nativeContext.restore\n ) {\n return false;\n }\n\n const dpr = stage.window?.dpr ?? context.dpr ?? 1;\n const transformPoint = (x: number, y: number) => ({\n x: matrix.a * x + matrix.c * y + matrix.e,\n y: matrix.b * x + matrix.d * y + matrix.f\n });\n const padding = 8;\n\n nativeContext.save();\n nativeContext.setTransform(dpr, 0, 0, dpr, 0, 0);\n prevComponentBounds.forEach(bounds => {\n const p1 = transformPoint(bounds.x1, bounds.y1);\n const p2 = transformPoint(bounds.x1, bounds.y2);\n const p3 = transformPoint(bounds.x2, bounds.y1);\n const p4 = transformPoint(bounds.x2, bounds.y2);\n const x1 = Math.min(p1.x, p2.x, p3.x, p4.x) - padding;\n const y1 = Math.min(p1.y, p2.y, p3.y, p4.y) - padding;\n const x2 = Math.max(p1.x, p2.x, p3.x, p4.x) + padding;\n const y2 = Math.max(p1.y, p2.y, p3.y, p4.y) + padding;\n\n nativeContext.clearRect(x1, y1, x2 - x1, y2 - y1);\n });\n nativeContext.restore();\n\n return true;\n }\n\n protected _getAxisInfoByField<T = IAxis>(field: 'x' | 'y' | 'category' | 'value') {\n // 加判空防止某些特殊时刻(如 updateSpec 时)鼠标滑过图表导致报错\n const axesComponents = this._option.getComponentsByKey?.('axes') as IAxis[];\n if (!axesComponents?.length) {\n return null;\n }\n let bindingAxesIndex: number[] = get(this._spec, `${field}Field.bindingAxesIndex`);\n if (!bindingAxesIndex) {\n bindingAxesIndex = [];\n axesComponents.forEach((item, index) => {\n if (ORIENT_MAP[field].includes(item.getOrient())) {\n bindingAxesIndex.push(index);\n }\n });\n }\n if (!bindingAxesIndex.length) {\n return null;\n }\n\n const map: IAxisInfo<T> = new Map();\n let x1 = Infinity;\n let y1 = Infinity;\n let x2 = -Infinity;\n let y2 = -Infinity;\n const { x: sx, y: sy } = this.getLayoutStartPoint();\n bindingAxesIndex.forEach(idx => {\n (x1 = Infinity), (y1 = Infinity), (x2 = -Infinity), (y2 = -Infinity);\n const axis = axesComponents.find(axis => axis.getSpecIndex() === idx);\n if (!axis) {\n return;\n }\n const innerOffset = (axis as any).getInnerOffset?.() || { left: 0, right: 0, top: 0, bottom: 0 };\n const regions = axis.getRegions();\n regions.forEach(r => {\n const { x: regionStartX, y: regionStartY } = r.getLayoutStartPoint();\n x1 = Math.min(x1, regionStartX - sx + innerOffset.left);\n y1 = Math.min(y1, regionStartY - sy + innerOffset.top);\n x2 = Math.max(x2, regionStartX + r.getLayoutRect().width - sx - innerOffset.right);\n y2 = Math.max(y2, regionStartY + r.getLayoutRect().height - sy - innerOffset.bottom);\n });\n map.set(idx, { x1, y1, x2, y2, axis: axis as unknown as T });\n });\n\n return map;\n }\n\n onLayoutEnd(): void {\n const region = this._regions[0];\n this.setLayoutRect(region.getLayoutRect());\n this.setLayoutStartPosition(region.getLayoutStartPoint());\n\n super.onLayoutEnd();\n }\n\n protected _releaseEvent(): void {\n this.clearOutEvent();\n\n const triggerConfig = this._getTriggerEvent();\n if (triggerConfig) {\n triggerConfig.forEach(cfg => {\n this._eventOff(cfg.in, false, cfg.click);\n cfg.out && this._eventOff(cfg.out, true);\n });\n }\n }\n\n protected _parseFieldInfo() {\n Object.keys(this._stateByField).forEach(field => {\n const fieldSpec = (this._spec as any)[field];\n const { crosshairComp } = this._stateByField[field];\n\n if (fieldSpec && fieldSpec.visible) {\n this._stateByField[field].attributes = this._parseField(fieldSpec, field);\n\n if (crosshairComp) {\n const { style, type } = this._stateByField[field].attributes;\n const styleKey = type === 'rect' ? 'rectStyle' : 'lineStyle';\n\n crosshairComp.setAttributes({\n [styleKey]: style\n });\n }\n } else if (crosshairComp && crosshairComp.parent) {\n crosshairComp.parent.removeChild(crosshairComp);\n }\n });\n }\n\n protected _parseCrosshairSpec() {\n this._parseFieldInfo();\n\n const { trigger, triggerOff, labelZIndex, gridZIndex } = this._spec;\n if (trigger) {\n this.trigger = trigger;\n }\n if (triggerOff === 'none' || (isNumber(triggerOff) && triggerOff > 0)) {\n this.triggerOff = triggerOff;\n }\n if (labelZIndex !== undefined) {\n this.labelZIndex = labelZIndex;\n }\n if (gridZIndex !== undefined) {\n this.gridZIndex = gridZIndex;\n }\n }\n\n protected _parseField(field: ICrosshairCategoryFieldSpec, fieldName: string) {\n const hair = {} as any;\n const { line = {}, label = {}, visible } = field;\n\n hair.visible = visible;\n hair.type = line.type || 'line';\n\n if (line.visible === false) {\n hair.style = { visible: false };\n } else {\n const style = line.style || {};\n const { stroke, fill, lineWidth } = style as any;\n const { strokeOpacity, fillOpacity, opacity, ...restStyle } = style as any;\n const isLineType = hair.type === 'line';\n let finalOpacity = isLineType ? strokeOpacity : fillOpacity;\n if (isNumber(opacity)) {\n // FIXME: 之前的兼容逻辑,去掉可能会影响现有 crosshair 的展示效果\n finalOpacity = (finalOpacity ?? 1) * opacity;\n }\n hair.style = {\n opacity: finalOpacity,\n pickable: false,\n visible: true,\n ...restStyle\n };\n\n if (isLineType) {\n hair.style.stroke = stroke || fill;\n hair.style.lineWidth = get(line, 'width', lineWidth || 2);\n } else {\n hair.style.fill = fill || stroke;\n if (field?.line?.style?.stroke) {\n hair.style.stroke = field.line.style.stroke;\n }\n const rectSize = get(line, 'width');\n if (typeof rectSize === 'string') {\n const percent = parseInt(rectSize.substring(0, rectSize.length - 1), 10) / 100;\n hair.style.sizePercent = percent;\n } else if (typeof rectSize === 'number' || typeof rectSize === 'function') {\n hair.style.size = rectSize;\n }\n }\n }\n\n if (!!label.visible) {\n const labelBackground = label.labelBackground || {};\n const syncAxisLabelAngle = label.syncAxisLabelAngle ?? false;\n const labelStyle = label.style || {};\n const {\n fill: rectFill = 'rgba(47, 59, 82, 0.9)',\n stroke: rectStroke,\n outerBorder,\n ...rectStyle\n } = labelBackground.style || {};\n hair.label = {\n visible: true,\n formatMethod: label.formatMethod,\n formatter: label.formatter,\n minWidth: labelBackground.minWidth,\n maxWidth: labelBackground.maxWidth,\n padding: labelBackground.padding,\n syncAxisLabelAngle,\n textStyle: {\n fontSize: 14,\n pickable: false,\n ...labelStyle,\n fill: labelStyle.fill || '#fff',\n stroke: get(labelStyle, 'stroke')\n },\n panel: (isBoolean(labelBackground.visible) ? labelBackground.visible : !!labelBackground)\n ? {\n visible: true,\n pickable: false,\n fill: rectFill,\n stroke: rectStroke,\n // Note: 通过这个配置可以保证 label 和 轴 label 对齐\n outerBorder: {\n stroke: rectFill,\n distance: 0,\n lineWidth: 3,\n ...outerBorder\n },\n ...rectStyle\n }\n : { visible: false },\n zIndex: this.labelZIndex,\n childrenPickable: false,\n pickable: false\n };\n } else {\n hair.label = { visible: false };\n }\n\n return hair;\n }\n\n protected _filterAxisByPoint<T>(axisMap: IAxisInfo<T>, relativeX: number, relativeY: number) {\n axisMap &&\n axisMap.forEach(item => {\n const axis = item.axis as unknown as IAxis | IPolarAxis;\n if (outOfBounds(item, relativeX, relativeY)) {\n axisMap.delete(axis.getSpecIndex());\n }\n if ((axis as IPolarAxis).type.startsWith('polarAxis')) {\n // 极坐标下需要判断是否在半径内\n const center = (axis as IPolarAxis).getCenter();\n const innerRadius = (axis as IPolarAxis).getInnerRadius();\n const outerRadius = (axis as IPolarAxis).getOuterRadius();\n const distance = PointService.distancePP({ x: relativeX, y: relativeY }, center);\n if (distance > outerRadius || distance < innerRadius) {\n axisMap.delete((axis as IPolarAxis).getSpecIndex());\n }\n }\n });\n return axisMap;\n }\n\n protected _updateCrosshairLabel(label: Tag, labelAttrs: any, callback: (label: Tag) => void) {\n // 文本\n const container = this.getContainer();\n if (label) {\n label.setAttributes(labelAttrs);\n } else {\n label = new Tag(labelAttrs);\n container?.add(label as unknown as INode);\n callback(label);\n }\n limitTagInBounds(label, this._getLimitBounds());\n }\n\n protected clearOutEvent() {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n if (this._clickLock) {\n this._clickLock = null;\n }\n\n if (this._hasActive) {\n this._hasActive = null;\n }\n }\n\n protected _hideByField(field: string) {\n const { crosshairComp, labelsComp } = this._stateByField[field];\n\n crosshairComp && crosshairComp.hideAll();\n\n if (labelsComp) {\n Object.keys(labelsComp).forEach(key => {\n labelsComp[key] && labelsComp[key].hideAll();\n });\n }\n }\n\n hide() {\n // 隐藏\n Object.keys(this._stateByField).forEach(field => {\n this._hideByField(field);\n });\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return Object.keys(this._stateByField).reduce((res, field) => {\n const { crosshairComp, labelsComp } = this._stateByField[field];\n\n if (crosshairComp) {\n res.push(crosshairComp);\n }\n\n if (labelsComp) {\n Object.keys(labelsComp).forEach(key => {\n labelsComp[key] && res.push(labelsComp[key]);\n });\n }\n return res;\n }, []);\n }\n\n private _getNeedClearVRenderComponentBounds(): IBoundsLike[] {\n return this._getNeedClearVRenderComponents().reduce((bounds, component) => {\n if (!component || component.attribute.visible === false) {\n return bounds;\n }\n\n const componentBounds = component.globalAABBBounds;\n\n if (\n componentBounds &&\n Number.isFinite(componentBounds.x1) &&\n Number.isFinite(componentBounds.y1) &&\n Number.isFinite(componentBounds.x2) &&\n Number.isFinite(componentBounds.y2)\n ) {\n bounds.push({\n x1: componentBounds.x1,\n y1: componentBounds.y1,\n x2: componentBounds.x2,\n y2: componentBounds.y2\n });\n }\n\n return bounds;\n }, [] as IBoundsLike[]);\n }\n}\n"]}
|
|
@@ -21,6 +21,7 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
|
|
|
21
21
|
private _clickLock?;
|
|
22
22
|
private _hasActive?;
|
|
23
23
|
private _onlyLockClick?;
|
|
24
|
+
private _pendingRenderAfterRendering?;
|
|
24
25
|
get enableRemain(): boolean;
|
|
25
26
|
private _limitBounds;
|
|
26
27
|
constructor(spec: T, options: IComponentOption);
|
|
@@ -65,6 +66,9 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
|
|
|
65
66
|
private _handleTooltipShow;
|
|
66
67
|
private _handleTooltipHideOrRelease;
|
|
67
68
|
private _renderNextFrame;
|
|
69
|
+
private _renderStage;
|
|
70
|
+
private _isTransparentExternalCanvasStage;
|
|
71
|
+
private _clearPreviousComponents;
|
|
68
72
|
protected _getAxisInfoByField<T = IAxis>(field: 'x' | 'y' | 'category' | 'value'): IAxisInfo<T>;
|
|
69
73
|
onLayoutEnd(): void;
|
|
70
74
|
protected _releaseEvent(): void;
|
|
@@ -77,4 +81,5 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
|
|
|
77
81
|
protected _hideByField(field: string): void;
|
|
78
82
|
hide(): void;
|
|
79
83
|
protected _getNeedClearVRenderComponents(): IGraphic[];
|
|
84
|
+
private _getNeedClearVRenderComponentBounds;
|
|
80
85
|
}
|
|
@@ -63,13 +63,14 @@ export class BaseCrossHair extends BaseComponent {
|
|
|
63
63
|
const tooltipData = params.tooltipData;
|
|
64
64
|
if (params.isEmptyTooltip || !tooltipData || !tooltipData.length) return void this._handleTooltipHideOrRelease();
|
|
65
65
|
if (isObject(this._spec.followTooltip) && !1 === this._spec.followTooltip[params.activeType]) return void this._handleTooltipHideOrRelease();
|
|
66
|
-
const {x: x, y: y} = this.calculateTriggerPoint(params);
|
|
66
|
+
const prevComponentBounds = this._getNeedClearVRenderComponentBounds(), {x: x, y: y} = this.calculateTriggerPoint(params);
|
|
67
67
|
this.showDefault = !1, this._layoutCrosshair(x, y, tooltipData, params.activeType);
|
|
68
68
|
const components = this._getNeedClearVRenderComponents();
|
|
69
69
|
this._hasActive = components.some((comp => comp && !1 !== comp.attribute.visible)),
|
|
70
|
-
this._renderNextFrame();
|
|
70
|
+
this._renderNextFrame(prevComponentBounds);
|
|
71
71
|
}, this._handleTooltipHideOrRelease = () => {
|
|
72
|
-
|
|
72
|
+
const prevComponentBounds = this._getNeedClearVRenderComponentBounds();
|
|
73
|
+
this.clearOutEvent(), this.hideCrosshair(), this._renderNextFrame(prevComponentBounds);
|
|
73
74
|
}, this.enable = !0, this.showDefault = !0;
|
|
74
75
|
}
|
|
75
76
|
_setAllAxisValues(axisMap, point, field) {
|
|
@@ -219,9 +220,39 @@ export class BaseCrossHair extends BaseComponent {
|
|
|
219
220
|
source: Event_Source_Type.chart
|
|
220
221
|
}, this._handleTooltipHideOrRelease);
|
|
221
222
|
}
|
|
222
|
-
_renderNextFrame() {
|
|
223
|
-
var _a
|
|
224
|
-
|
|
223
|
+
_renderNextFrame(prevComponentBounds) {
|
|
224
|
+
var _a;
|
|
225
|
+
const stage = this._option.globalInstance.getStage();
|
|
226
|
+
if (stage) return "rendering" === stage.state ? (null === (_a = stage.renderNextFrame) || void 0 === _a || _a.call(stage),
|
|
227
|
+
void (this._pendingRenderAfterRendering || (this._pendingRenderAfterRendering = !0,
|
|
228
|
+
Promise.resolve().then((() => {
|
|
229
|
+
var _a;
|
|
230
|
+
this._pendingRenderAfterRendering = !1, "released" !== stage.releaseStatus && ("rendering" !== stage.state ? this._renderStage(stage, prevComponentBounds) : null === (_a = stage.renderNextFrame) || void 0 === _a || _a.call(stage));
|
|
231
|
+
}))))) : void this._renderStage(stage, prevComponentBounds);
|
|
232
|
+
}
|
|
233
|
+
_renderStage(stage, prevComponentBounds) {
|
|
234
|
+
var _a;
|
|
235
|
+
const shouldRenderExternalCanvas = this._isTransparentExternalCanvasStage(stage), cleared = this._clearPreviousComponents(stage, prevComponentBounds);
|
|
236
|
+
(shouldRenderExternalCanvas || cleared) && "_story_needRender" in stage && (stage._story_needRender = !0),
|
|
237
|
+
stage.render ? stage.render() : null === (_a = stage.renderNextFrame) || void 0 === _a || _a.call(stage);
|
|
238
|
+
}
|
|
239
|
+
_isTransparentExternalCanvasStage(stage) {
|
|
240
|
+
var _a;
|
|
241
|
+
return !1 === (null == stage ? void 0 : stage.background) && !1 === (null === (_a = stage.params) || void 0 === _a ? void 0 : _a.canvasControled);
|
|
242
|
+
}
|
|
243
|
+
_clearPreviousComponents(stage, prevComponentBounds) {
|
|
244
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
245
|
+
if (!(null == prevComponentBounds ? void 0 : prevComponentBounds.length) || !this._isTransparentExternalCanvasStage(stage)) return !1;
|
|
246
|
+
const context = null === (_b = null === (_a = stage.window) || void 0 === _a ? void 0 : _a.getContext) || void 0 === _b ? void 0 : _b.call(_a), nativeContext = null == context ? void 0 : context.nativeContext, matrix = null === (_d = null === (_c = stage.window) || void 0 === _c ? void 0 : _c.getViewBoxTransform) || void 0 === _d ? void 0 : _d.call(_c);
|
|
247
|
+
if (!(nativeContext && matrix && nativeContext.save && nativeContext.setTransform && nativeContext.clearRect && nativeContext.restore)) return !1;
|
|
248
|
+
const dpr = null !== (_g = null !== (_f = null === (_e = stage.window) || void 0 === _e ? void 0 : _e.dpr) && void 0 !== _f ? _f : context.dpr) && void 0 !== _g ? _g : 1, transformPoint = (x, y) => ({
|
|
249
|
+
x: matrix.a * x + matrix.c * y + matrix.e,
|
|
250
|
+
y: matrix.b * x + matrix.d * y + matrix.f
|
|
251
|
+
});
|
|
252
|
+
return nativeContext.save(), nativeContext.setTransform(dpr, 0, 0, dpr, 0, 0), prevComponentBounds.forEach((bounds => {
|
|
253
|
+
const p1 = transformPoint(bounds.x1, bounds.y1), p2 = transformPoint(bounds.x1, bounds.y2), p3 = transformPoint(bounds.x2, bounds.y1), p4 = transformPoint(bounds.x2, bounds.y2), x1 = Math.min(p1.x, p2.x, p3.x, p4.x) - 8, y1 = Math.min(p1.y, p2.y, p3.y, p4.y) - 8, x2 = Math.max(p1.x, p2.x, p3.x, p4.x) + 8, y2 = Math.max(p1.y, p2.y, p3.y, p4.y) + 8;
|
|
254
|
+
nativeContext.clearRect(x1, y1, x2 - x1, y2 - y1);
|
|
255
|
+
})), nativeContext.restore(), !0;
|
|
225
256
|
}
|
|
226
257
|
_getAxisInfoByField(field) {
|
|
227
258
|
var _a, _b;
|
|
@@ -392,6 +423,18 @@ export class BaseCrossHair extends BaseComponent {
|
|
|
392
423
|
})), res;
|
|
393
424
|
}), []);
|
|
394
425
|
}
|
|
426
|
+
_getNeedClearVRenderComponentBounds() {
|
|
427
|
+
return this._getNeedClearVRenderComponents().reduce(((bounds, component) => {
|
|
428
|
+
if (!component || !1 === component.attribute.visible) return bounds;
|
|
429
|
+
const componentBounds = component.globalAABBBounds;
|
|
430
|
+
return componentBounds && Number.isFinite(componentBounds.x1) && Number.isFinite(componentBounds.y1) && Number.isFinite(componentBounds.x2) && Number.isFinite(componentBounds.y2) && bounds.push({
|
|
431
|
+
x1: componentBounds.x1,
|
|
432
|
+
y1: componentBounds.y1,
|
|
433
|
+
x2: componentBounds.x2,
|
|
434
|
+
y2: componentBounds.y2
|
|
435
|
+
}), bounds;
|
|
436
|
+
}), []);
|
|
437
|
+
}
|
|
395
438
|
}
|
|
396
439
|
|
|
397
440
|
BaseCrossHair.specKey = "crosshair";
|