diff --git a/src/animate/animation/sector-path-update.ts b/src/animate/animation/sector-path-update.ts index d40b0b4947..1354704f98 100644 --- a/src/animate/animation/sector-path-update.ts +++ b/src/animate/animation/sector-path-update.ts @@ -131,7 +131,7 @@ export function sectorPathUpdate(shape: IShape, animateCfg: GAnimateCfg, cfg: An const diffEndAngle = curEndAngle - preEndAngle; // 没有 diff 时直接返回最终 attrs,不需要额外动画 if (diffStartAngle === 0 && diffEndAngle === 0) { - shape.attr('path', path); + shape.attr(toAttrs); return; } diff --git a/tests/bugs/pie-update-animate-spec.ts b/tests/bugs/pie-update-animate-spec.ts new file mode 100644 index 0000000000..1479671bf2 --- /dev/null +++ b/tests/bugs/pie-update-animate-spec.ts @@ -0,0 +1,34 @@ +import { Chart } from '../../src'; +import { createDiv } from '../util/dom'; + +describe('pie update animate', () => { + it('pie should update other attribute without angle change', () => { + const data = [ + { type: '一线城市', value: 20 }, + { type: '二线城市', value: 0 }, + { type: '三线城市', value: 10 }, + ]; + const chart = new Chart({ + container: createDiv(), + width: 600, + height: 300, + autoFit: true, + }); + chart.data(data); + + chart.coordinate('theta', { + radius: 0.75, + }); + + const interval = chart.interval().adjust('stack').position('value').color('type', ['blue', 'green', 'yellow']); + chart.render(); + + const shape = interval.elements[0].shape; + + interval.color('type', ['#ff0000']); + chart.render(true); + expect(shape.attr('fill')).toEqual('#ff0000'); + + chart.destroy(); + }); +});