@alicloud/cloud-charts
Version:

87 lines (84 loc) • 2.39 kB
JavaScript
;
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']
}]
});