From eec38cd19d2ca6e2c948357af2fbf9bd26f94a3e Mon Sep 17 00:00:00 2001 From: lang Date: Sun, 18 Oct 2015 13:10:53 +0800 Subject: [PATCH] Pie selectedMode --- src/chart/pie/PieSeries.js | 16 +++++++++++++--- src/chart/pie/PieView.js | 39 ++++++++++++++++++++++++++++---------- src/component/tooltip.js | 2 +- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/chart/pie/PieSeries.js b/src/chart/pie/PieSeries.js index 1a9348458..d1a529a4f 100644 --- a/src/chart/pie/PieSeries.js +++ b/src/chart/pie/PieSeries.js @@ -43,8 +43,16 @@ define(function(require) { /** * @param {string} name */ + // PENGING If selectedMode is null ? select: function (name) { - var dataOpt = this._dataOptMap[name]; + var dataOptMap = this._dataOptMap; + var dataOpt = dataOptMap[name]; + var selectedMode = this.get('selectedMode'); + if (selectedMode === 'single') { + zrUtil.each(dataOptMap, function (dataOpt) { + dataOpt.selected = false; + }); + } dataOpt && (dataOpt.selected = true); }, @@ -53,7 +61,8 @@ define(function(require) { */ unSelect: function (name) { var dataOpt = this._dataOptMap[name]; - dataOpt && (dataOpt.selected = false); + var selectedMode = this.get('selectedMode'); + selectedMode !== 'single' && dataOpt && (dataOpt.selected = false); }, /** @@ -62,7 +71,8 @@ define(function(require) { toggleSelected: function (name) { var dataOpt = this._dataOptMap[name]; if (dataOpt != null) { - return dataOpt.selected = !dataOpt.selected; + this[dataOpt.selected ? 'unSelect' : 'select'](name); + return dataOpt.selected; } }, diff --git a/src/chart/pie/PieView.js b/src/chart/pie/PieView.js index d10f66224..f289379fe 100644 --- a/src/chart/pie/PieView.js +++ b/src/chart/pie/PieView.js @@ -7,16 +7,23 @@ define(function (require) { var data = seriesModel.getData(); var dataIndex = this.dataIndex; var name = data.getName(dataIndex); + var selectedOffset = seriesModel.get('selectedOffset'); - updateSelected(this, - seriesModel.toggleSelected(name), - seriesModel.get('selectedOffset') - ); + seriesModel.toggleSelected(name); + + data.each(function (idx) { + updateSelected( + data.getItemGraphicEl(idx), + data.getItemLayout(idx), + seriesModel.isSelected(data.getName(idx)), + selectedOffset + ); + }); } - function updateSelected(el, isSelected, selectedOffset) { + function updateSelected(el, layout, isSelected, selectedOffset) { var shape = el.shape; - var midAngle = (shape.startAngle + shape.endAngle) / 2; + var midAngle = (layout.startAngle + layout.endAngle) / 2; var dx = Math.cos(midAngle); var dy = (shape.clockwise ? 1 : -1) * Math.sin(midAngle); @@ -93,6 +100,8 @@ define(function (require) { var firstSector; var onSectorClick = zrUtil.curry(selectData, seriesModel); + var selectedMode = seriesModel.get('selectedMode'); + data.diff(oldData) .add(function (idx) { var layout = data.getItemLayout(idx); @@ -101,7 +110,8 @@ define(function (require) { layout, '', hasAnimation && !isFirstRender ); - sector.on('click', onSectorClick); + selectedMode + && sector.on('click', onSectorClick); data.setItemGraphicEl(idx, sector); @@ -117,12 +127,16 @@ define(function (require) { var layout = data.getItemLayout(newIdx); var labelLayout = layout.label; + var labelLine = sector.__labelLine; + var labelText = sector.__labelText; + sector.animateTo({ shape: layout }, 300, 'cubicOut'); - var labelLine = sector.__labelLine; - var labelText = sector.__labelText; + selectedMode + ? sector.on('click', onSectorClick) + : sector.off('click'); labelLine.animateTo({ shape: { @@ -203,7 +217,12 @@ define(function (require) { }); } - updateSelected(sector, itemModel.get('selected'), selectedOffset); + updateSelected( + sector, + data.getItemLayout(idx), + itemModel.get('selected'), + selectedOffset + ); }); }, diff --git a/src/component/tooltip.js b/src/component/tooltip.js index 7ff3ee273..6821d9123 100644 --- a/src/component/tooltip.js +++ b/src/component/tooltip.js @@ -146,7 +146,7 @@ define(function (require) { } // Always show item tooltip if mouse is on the element with dataIndex - if (el && el.dataIndex) { + if (el && el.dataIndex != null) { var seriesModel = ecModel.getSeriesByIndex(el.seriesIndex); -- GitLab