From 248de3dd8a7d68633c08e8f7fb78cf3452c55e7d Mon Sep 17 00:00:00 2001 From: mantou132 <709922234@qq.com> Date: Wed, 29 Nov 2023 00:10:03 +0800 Subject: [PATCH] [duoyun-ui] Improve tooltip position --- .../duoyun-ui/docs/en/02-elements/tooltip.md | 24 ++++--------------- .../duoyun-ui/docs/zh/02-elements/tooltip.md | 24 ++++--------------- packages/duoyun-ui/src/elements/popover.ts | 22 ++++++++++------- 3 files changed, 24 insertions(+), 46 deletions(-) diff --git a/packages/duoyun-ui/docs/en/02-elements/tooltip.md b/packages/duoyun-ui/docs/en/02-elements/tooltip.md index 44717a29..1a719810 100644 --- a/packages/duoyun-ui/docs/en/02-elements/tooltip.md +++ b/packages/duoyun-ui/docs/en/02-elements/tooltip.md @@ -2,25 +2,11 @@ ## Example - - -```ts -import { render, html } from '@mantou/gem'; - -import 'duoyun-ui/elements/tooltip'; -import 'duoyun-ui/elements/button'; - -render( - html` - - Current Time - - `, - document.getElementById('root'), -); -``` - - + ## API diff --git a/packages/duoyun-ui/docs/zh/02-elements/tooltip.md b/packages/duoyun-ui/docs/zh/02-elements/tooltip.md index f12e4fbe..1a719810 100644 --- a/packages/duoyun-ui/docs/zh/02-elements/tooltip.md +++ b/packages/duoyun-ui/docs/zh/02-elements/tooltip.md @@ -2,25 +2,11 @@ ## Example - - -```ts -import { render, html } from '@mantou/gem'; - -import 'duoyun-ui/elements/tooltip'; -import 'duoyun-ui/elements/button'; - -render( - html` - - 当前时间 - - `, - document.getElementById('root'), -); -``` - - + ## API diff --git a/packages/duoyun-ui/src/elements/popover.ts b/packages/duoyun-ui/src/elements/popover.ts index fe7a9d19..6616b66b 100644 --- a/packages/duoyun-ui/src/elements/popover.ts +++ b/packages/duoyun-ui/src/elements/popover.ts @@ -214,50 +214,56 @@ export class DuoyunPopoverElement extends GemElement { #genStyle = (position: Position): StyleObject => { const { top, left, right, bottom } = this.state; + const widthHalf = (right - left) / 2; + const heightHalf = (top - bottom) / 2; switch (position) { case 'top': return { - left: `${left + (right - left) / 2}px`, + left: `${left + widthHalf}px`, bottom: `${innerHeight - top + offset}px`, transform: `translateX(-50%)`, }; case 'bottom': return { - left: `${left + (right - left) / 2}px`, + left: `${left + widthHalf}px`, top: `${bottom + offset}px`, transform: `translateX(-50%)`, }; case 'left': return { right: `${innerWidth - left + offset}px`, - top: `${top + (bottom - top) / 2}px`, + top: `${top - heightHalf}px`, transform: `translateY(-50%)`, }; case 'right': return { left: `${right + offset}px`, - top: `${top + (bottom - top) / 2}px`, + top: `${top - heightHalf}px`, transform: `translateY(-50%)`, }; case 'bottomRight': return { right: `${innerWidth - right}px`, top: `${bottom + offset}px`, + '--arrow-offset': `min(2em, ${widthHalf}px)`, }; case 'topRight': return { right: `${innerWidth - right}px`, bottom: `${innerHeight - top + offset}px`, + '--arrow-offset': `min(2em, ${widthHalf}px)`, }; case 'bottomLeft': return { left: `${left}px`, top: `${bottom + offset}px`, + '--arrow-offset': `min(2em, ${widthHalf}px)`, }; case 'topLeft': return { left: `${left}px`, bottom: `${innerHeight - top + offset}px`, + '--arrow-offset': `min(2em, ${widthHalf}px)`, }; } }; @@ -402,11 +408,11 @@ const ghostStyle = createCSSSheet(css` transform: translateX(-50%); } :host([data-position='topRight'])::before { - right: 2em; + right: var(--arrow-offset); transform: translateX(50%); } :host([data-position='topLeft'])::before { - left: 2em; + left: var(--arrow-offset); transform: translateX(-50%); } :host([data-position='bottom'])::before, @@ -421,11 +427,11 @@ const ghostStyle = createCSSSheet(css` transform: translateX(-50%); } :host([data-position='bottomRight'])::before { - right: 2em; + right: var(--arrow-offset); transform: translateX(50%); } :host([data-position='bottomLeft'])::before { - left: 2em; + left: var(--arrow-offset); transform: translateX(-50%); } :host([data-position='left'])::before {