diff --git a/src/animate/animation/sector-path-update.ts b/src/animate/animation/sector-path-update.ts index 2046bbbdaa..277c5a0238 100644 --- a/src/animate/animation/sector-path-update.ts +++ b/src/animate/animation/sector-path-update.ts @@ -128,6 +128,11 @@ export function sectorPathUpdate(shape: IShape, animateCfg: GAnimateCfg, cfg: An const center = coordinate.getCenter(); const diffStartAngle = curStartAngle - preStartAngle; const diffEndAngle = curEndAngle - preEndAngle; + // 没有 diff 时直接返回最终 attrs,不需要额外动画 + if (diffStartAngle === 0 && diffEndAngle === 0) { + shape.attr('path', path); + return; + } shape.animate( (ratio) => { diff --git a/tests/bugs/charts-574-spec.ts b/tests/bugs/charts-574-spec.ts new file mode 100644 index 0000000000..66befb77af --- /dev/null +++ b/tests/bugs/charts-574-spec.ts @@ -0,0 +1,39 @@ +import { Chart } from '../../src'; +import { createDiv } from '../util/dom'; + +describe('574', () => { + it('574', () => { + 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, + }); + + chart.interval().adjust('stack').position('value').color('type', ['blue', 'green', 'yellow']); + chart.render(); + const fn = jest.fn(); + chart.geometries[0].elements[2].shape.animate = fn; + chart.changeData([ + { type: '一线城市', value: 20 }, + { type: '三线城市', value: 10 }, + ]); + expect(fn).not.toBeCalled(); + chart.changeData([ + { type: '一线城市', value: 20 }, + { type: '三线城市', value: 15 }, + ]); + expect(fn).toBeCalled(); + chart.destroy(); + }); +});