diff --git a/src/component/legend/LegendView.ts b/src/component/legend/LegendView.ts index 432d9ced03..4c1e69e04b 100644 --- a/src/component/legend/LegendView.ts +++ b/src/component/legend/LegendView.ts @@ -130,8 +130,6 @@ class LegendView extends ComponentView { selectorPosition = orient === 'horizontal' ? 'end' : 'start'; } - this.renderInner(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition); - // Perform layout. const positionInfo = legendModel.getBoxLayoutParams(); const viewportSize = {width: api.getWidth(), height: api.getHeight()}; @@ -139,6 +137,8 @@ class LegendView extends ComponentView { const maxSize = layoutUtil.getLayoutRect(positionInfo, viewportSize, padding); + this.renderInner(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition, maxSize); + const mainRect = this.layoutInner(legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition); // Place mainGroup, based on the calculated `mainRect`. @@ -173,7 +173,8 @@ class LegendView extends ComponentView { api: ExtensionAPI, selector: LegendSelectorButtonOption[], orient: LegendOption['orient'], - selectorPosition: LegendOption['selectorPosition'] + selectorPosition: LegendOption['selectorPosition'], + maxSize: layoutUtil.LayoutRect, ) { const contentGroup = this.getContentGroup(); const legendDrawnMap = zrUtil.createHashMap(); @@ -221,7 +222,8 @@ class LegendView extends ComponentView { const itemGroup = this._createItem( seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, - lineVisualStyle, style, legendIcon, selectMode, api + lineVisualStyle, style, legendIcon, selectMode, api, + maxSize, ); itemGroup.on('click', curry(dispatchSelectAction, name, null, api, excludeSeriesId)) @@ -276,7 +278,8 @@ class LegendView extends ComponentView { const itemGroup = this._createItem( seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, - {}, style, legendIcon, selectMode, api + {}, style, legendIcon, selectMode, api, + maxSize, ); // FIXME: consider different series has items with the same name. @@ -387,7 +390,8 @@ class LegendView extends ComponentView { itemVisualStyle: PathStyleProps, legendIcon: string, selectMode: LegendOption['selectedMode'], - api: ExtensionAPI + api: ExtensionAPI, + maxSize: layoutUtil.LayoutRect, ) { const drawType = seriesModel.visualDrawType; const itemWidth = legendModel.get('itemWidth'); @@ -469,7 +473,8 @@ class LegendView extends ComponentView { y: itemHeight / 2, fill: textColor, align: textAlign, - verticalAlign: 'middle' + verticalAlign: 'middle', + width: maxSize.width - textX, }, {inheritColor: textColor}) })); diff --git a/src/component/legend/ScrollableLegendView.ts b/src/component/legend/ScrollableLegendView.ts index da19a699d1..40bcd9666c 100644 --- a/src/component/legend/ScrollableLegendView.ts +++ b/src/component/legend/ScrollableLegendView.ts @@ -114,12 +114,13 @@ class ScrollableLegendView extends LegendView { api: ExtensionAPI, selector: LegendSelectorButtonOption[], orient: ScrollableLegendOption['orient'], - selectorPosition: ScrollableLegendOption['selectorPosition'] + selectorPosition: ScrollableLegendOption['selectorPosition'], + maxSize: layoutUtil.LayoutRect, ) { const self = this; // Render content items. - super.renderInner(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition); + super.renderInner(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition, maxSize); const controllerGroup = this._controllerGroup; diff --git a/test/legend-overflow.html b/test/legend-overflow.html new file mode 100644 index 0000000000..d32fa94e82 --- /dev/null +++ b/test/legend-overflow.html @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +