UNPKG

@antv/g2

Version:

the Grammar of Graphics in Javascript

78 lines (67 loc) 1.96 kB
import { isEqual, get } from '@antv/util'; import { View } from '../../../../chart'; import { Point } from '../../../../interface'; import Action from '../../base'; import Tooltip from '../../../../chart/controller/tooltip'; /** * Tooltip 展示隐藏的 Action * @ignore */ class TooltipAction extends Action { private timeStamp: number = 0; private location: Point; /** * 显示 Tooltip * @returns */ public show() { const context = this.context; const ev = context.event; const view = context.view; const isTooltipLocked = view.isTooltipLocked(); if (isTooltipLocked) { // 锁定时不移动 tooltip return; } const lastTimeStamp = this.timeStamp; const timeStamp = +new Date(); // 在 showDelay 毫秒(默认 16ms)内到 tooltip 上可以实现 enterable(调参工程师) const showDelay = get(context.view.getOptions(), 'tooltip.showDelay', 16); if (timeStamp - lastTimeStamp > showDelay) { const preLoc = this.location; const curLoc = { x: ev.x, y: ev.y }; if (!preLoc || !isEqual(preLoc, curLoc)) { this.showTooltip(view, curLoc); } this.timeStamp = timeStamp; this.location = curLoc; } } /** * 隐藏 Tooltip。 * @returns */ public hide() { const view = this.context.view; const tooltip = view.getController('tooltip'); const { clientX, clientY } = this.context.event; // 如果已经 enterable + 已经在 tooltip 上,那么不隐藏 if (tooltip.isCursorEntered({ x: clientX, y: clientY })) { return; } // 锁定 tooltip 时不隐藏 if (view.isTooltipLocked()) { return; } this.hideTooltip(view); this.location = null; } protected showTooltip(view: View, point: Point) { // 相同位置不重复展示 view.showTooltip(point); } protected hideTooltip(view) { view.hideTooltip(); } } export default TooltipAction;