diff --git a/components/style/placementArrow.ts b/components/style/placementArrow.ts index 5af5bbe78c..152b329f51 100644 --- a/components/style/placementArrow.ts +++ b/components/style/placementArrow.ts @@ -209,7 +209,9 @@ export default function getArrowStyle>>>> Top [connectArrowCls( - [`&-placement-topLeft`, `&-placement-top`, `&-placement-topRight`], + [`&-placement-topLeft`, `&-placement-top`, `&-placement-topRight`].map( + cls => (cls += ':not(&-arrow-hidden)'), + ), showArrowCls, )]: { paddingBottom: dropdownArrowDistance, @@ -217,7 +219,9 @@ export default function getArrowStyle>>>> Bottom [connectArrowCls( - [`&-placement-bottomLeft`, `&-placement-bottom`, `&-placement-bottomRight`], + [`&-placement-bottomLeft`, `&-placement-bottom`, `&-placement-bottomRight`].map( + cls => (cls += ':not(&-arrow-hidden)'), + ), showArrowCls, )]: { paddingTop: dropdownArrowDistance, @@ -225,7 +229,9 @@ export default function getArrowStyle>>>> Left [connectArrowCls( - [`&-placement-leftTop`, `&-placement-left`, `&-placement-leftBottom`], + [`&-placement-leftTop`, `&-placement-left`, `&-placement-leftBottom`].map( + cls => (cls += ':not(&-arrow-hidden)'), + ), showArrowCls, )]: { paddingRight: { @@ -236,7 +242,9 @@ export default function getArrowStyle>>>> Right [connectArrowCls( - [`&-placement-rightTop`, `&-placement-right`, `&-placement-rightBottom`], + [`&-placement-rightTop`, `&-placement-right`, `&-placement-rightBottom`].map( + cls => (cls += ':not(&-arrow-hidden)'), + ), showArrowCls, )]: { paddingLeft: { diff --git a/components/tooltip/Tooltip.tsx b/components/tooltip/Tooltip.tsx index 0a9902afb2..65d6203e4b 100644 --- a/components/tooltip/Tooltip.tsx +++ b/components/tooltip/Tooltip.tsx @@ -145,11 +145,16 @@ export default defineComponent({ }); const tooltipPlacements = computed(() => { - const { builtinPlacements, arrowPointAtCenter, autoAdjustOverflow } = props; + const { builtinPlacements, autoAdjustOverflow, arrow, arrowPointAtCenter } = props; + let mergedArrowPointAtCenter = arrowPointAtCenter; + + if (typeof arrow === 'object') { + mergedArrowPointAtCenter = arrow.pointAtCenter ?? arrowPointAtCenter; + } return ( builtinPlacements || getPlacements({ - arrowPointAtCenter, + arrowPointAtCenter: mergedArrowPointAtCenter, autoAdjustOverflow, }) ); @@ -283,6 +288,7 @@ export default defineComponent({ ...attrs, ...(props as TooltipProps), prefixCls: prefixCls.value, + arrow: !!props.arrow, getPopupContainer: getPopupContainer?.value, builtinPlacements: tooltipPlacements.value, visible: tempVisible, diff --git a/components/tooltip/abstractTooltipProps.ts b/components/tooltip/abstractTooltipProps.ts index 489829de4a..a3f142db14 100644 --- a/components/tooltip/abstractTooltipProps.ts +++ b/components/tooltip/abstractTooltipProps.ts @@ -35,7 +35,12 @@ export default () => ({ mouseEnterDelay: Number, mouseLeaveDelay: Number, getPopupContainer: Function as PropType<(triggerNode: HTMLElement) => HTMLElement>, + /**@deprecated Please use `arrow={{ pointAtCenter: true }}` instead. */ arrowPointAtCenter: { type: Boolean, default: undefined }, + arrow: { + type: [Boolean, Object] as PropType, + default: true as boolean | { pointAtCenter?: boolean }, + }, autoAdjustOverflow: { type: [Boolean, Object] as PropType, default: undefined as boolean | AdjustOverflow, diff --git a/components/tooltip/demo/arrow.vue b/components/tooltip/demo/arrow.vue new file mode 100644 index 0000000000..3fe3f25d5f --- /dev/null +++ b/components/tooltip/demo/arrow.vue @@ -0,0 +1,143 @@ + +--- +order: 6 +title: + zh-CN: 箭头展示 + en-US: Arrow show +--- + +## zh-CN +支持显示、隐藏以及将箭头保持居中定位。 + +## en-US + +Support show, hide or keep arrow in the center. + + + + + diff --git a/components/tooltip/demo/index.vue b/components/tooltip/demo/index.vue index 60fb98dd32..ac227a9bee 100644 --- a/components/tooltip/demo/index.vue +++ b/components/tooltip/demo/index.vue @@ -5,6 +5,7 @@ +