UNPKG

@alicloud/cloud-charts

Version:

![](https://img.shields.io/npm/v/@alicloud/cloud-charts?color=%23ff8200)

87 lines (84 loc) 2.39 kB
"use strict"; exports.__esModule = true; exports.drillDown = drillDown; exports.isParentNode = isParentNode; var _core = require("@antv/g2/esm/core"); var _util = require("@antv/util"); var _drillDown = require("./actions/drill-down"); function drillDown(view, onClick) { view.interaction('drill-down', { start: [{ trigger: 'element:click', isEnable: function isEnable(context) { return isParentNode(context); }, action: ['drill-down-action:click'] }, { trigger: 'afterchangesize', action: ['drill-down-action:resetPosition'] }, { trigger: 'click', isEnable: function isEnable(context) { onClick(context, inCenter(context)); return inCenter(context); }, action: ['drill-down-action:back'] }] }); } /** * 判断是否为父节点 */ function isParentNode(context) { var data = (0, _util.get)(context, ['event', 'data', 'data'], {}); return (0, _util.isArray)(data.children) && data.children.length > 0; } /** * 判断是否在中心 */ function inCenter(context) { var coordinate = context.view.getCoordinate(); var innerRadius = coordinate.innerRadius; if (innerRadius) { var _context$event = context.event, x = _context$event.x, y = _context$event.y; var _coordinate$center = coordinate.center, centerX = _coordinate$center.x, centerY = _coordinate$center.y; var r = coordinate.getRadius() * innerRadius; var distance = Math.sqrt(Math.pow(centerX - x, 2) + Math.pow(centerY - y, 2)); return distance < r; } return false; } (0, _core.registerAction)('drill-down-action', _drillDown.DrillDownAction); (0, _core.registerInteraction)('drill-down', { showEnable: [{ trigger: 'element:mouseenter', action: 'cursor:pointer', isEnable: isParentNode }, { trigger: 'element:mouseleave', action: 'cursor:default' }, // 中心处,肯定会触发 element:mouseleave 操作 { trigger: 'element:mouseleave', action: 'cursor:pointer', isEnable: inCenter }], start: [{ trigger: 'element:click', isEnable: isParentNode, action: ['drill-down-action:click'] }, { trigger: 'afterchangesize', action: ['drill-down-action:resetPosition'] }, { // 点击中心,返回上一层 trigger: 'click', isEnable: inCenter, action: ['drill-down-action:back'] }] });