diff --git a/app/src/dialog/tooltip.ts b/app/src/dialog/tooltip.ts index 97ac0f54695..60bc1e3e182 100644 --- a/app/src/dialog/tooltip.ts +++ b/app/src/dialog/tooltip.ts @@ -1,6 +1,7 @@ import {isMobile} from "../util/functions"; +import {Constants} from "../constants"; -let hideTooltipTimeout: NodeJS.Timeout | null = null; +let hideTooltipTimeout: number export const showTooltip = (message: string, target: Element, tooltipClass?: string) => { if (isMobile()) { @@ -13,35 +14,29 @@ export const showTooltip = (message: string, target: Element, tooltipClass?: str } // 清除 hideTooltip 的定时器 - if (hideTooltipTimeout) { - clearTimeout(hideTooltipTimeout); - hideTooltipTimeout = null; - } + clearTimeout(hideTooltipTimeout); + const className = tooltipClass?`tooltip tooltip--${tooltipClass}`:"tooltip"; let messageElement = document.getElementById("tooltip"); if (!messageElement) { - document.body.insertAdjacentHTML("beforeend", `
${message}
`); + document.body.insertAdjacentHTML("beforeend", `
${message}
`); messageElement = document.getElementById("tooltip"); } else { - const currentClassName = messageElement.className; - const currentMessage = messageElement.textContent; - - let newClassName = "tooltip"; - if (tooltipClass) { - newClassName += " tooltip--" + tooltipClass; - } - // 避免不必要的更新 - if (currentClassName !== newClassName) { - messageElement.className = newClassName; + if (messageElement.className !== className) { + messageElement.className = className; } - if (currentMessage !== message) { - // 鼠标在按钮等多层结构的元素上小幅移动时会频繁更新 + if (messageElement.innerHTML !== message) { messageElement.innerHTML = message; } + // 避免原本的 top 和 left 影响计算 + messageElement.removeAttribute("style"); } let left = targetRect.left; let top = targetRect.bottom; + + // position: parentE; parentW; ${number}parentW; ${number}bottom; + // right; right${number}bottom; right${number}top; top; const position = target.getAttribute("data-position"); const parentRect = target.parentElement.getBoundingClientRect(); @@ -92,14 +87,11 @@ export const showTooltip = (message: string, target: Element, tooltipClass?: str }; export const hideTooltip = () => { - if (hideTooltipTimeout) { - clearTimeout(hideTooltipTimeout); - } - hideTooltipTimeout = setTimeout(() => { + clearTimeout(hideTooltipTimeout); + hideTooltipTimeout = window.setTimeout(() => { const messageElement = document.getElementById("tooltip"); if (messageElement) { messageElement.remove(); } - hideTooltipTimeout = null; - }, 50); + }, Constants.TIMEOUT_TRANSITION); };