fix(视图): 修复 AntV 提示溢出导致的仪表板刷新

This commit is contained in:
wisonic-s 2024-05-08 14:12:37 +08:00
parent bb3eeab399
commit bd7c223888

View File

@ -106,7 +106,8 @@ export function getTheme(chart) {
color: tooltipColor, color: tooltipColor,
fontSize: tooltipFontsize + 'px', fontSize: tooltipFontsize + 'px',
background: tooltipBackgroundColor, background: tooltipBackgroundColor,
'z-index': 3000 'z-index': 3000,
position: 'fixed'
} }
} }
}, },
@ -153,7 +154,10 @@ export function getLabel(chart) {
} else if (chart.type.includes('line') || chart.type.includes('area')) { } else if (chart.type.includes('line') || chart.type.includes('area')) {
label = { label = {
position: l.position, position: l.position,
offsetY: -8 layout: [
{ type: 'hide-overlap' },
{ type: 'limit-in-plot' }
]
} }
} else if (equalsAny(chart.type, 'pie-rose', 'pie-donut-rose')) { } else if (equalsAny(chart.type, 'pie-rose', 'pie-donut-rose')) {
label = { label = {
@ -1208,7 +1212,13 @@ export function getTooltipContainer(id) {
const g2Tooltip = document.createElement('div') const g2Tooltip = document.createElement('div')
g2Tooltip.setAttribute('id', id) g2Tooltip.setAttribute('id', id)
g2Tooltip.classList.add('g2-tooltip') g2Tooltip.classList.add('g2-tooltip')
// 最多半屏,鼠标移入可滚动
g2Tooltip.style.maxHeight = '50%'
g2Tooltip.style.overflow = 'scroll'
g2Tooltip.style.display = 'none'
g2Tooltip.style.position = 'fixed'
g2Tooltip.style.left = '0px'
g2Tooltip.style.top = '0px'
const g2TooltipTitle = document.createElement('div') const g2TooltipTitle = document.createElement('div')
g2TooltipTitle.classList.add('g2-tooltip-title') g2TooltipTitle.classList.add('g2-tooltip-title')
g2Tooltip.appendChild(g2TooltipTitle) g2Tooltip.appendChild(g2TooltipTitle)
@ -1233,9 +1243,11 @@ export function configPlotTooltipEvent(chart, plot) {
// 鼠标可移入, 移入之后保持显示, 移出之后隐藏 // 鼠标可移入, 移入之后保持显示, 移出之后隐藏
plot.options.tooltip.container.addEventListener('mouseenter', e => { plot.options.tooltip.container.addEventListener('mouseenter', e => {
e.target.style.visibility = 'visible' e.target.style.visibility = 'visible'
e.target.style.display = 'block'
}) })
plot.options.tooltip.container.addEventListener('mouseleave', e => { plot.options.tooltip.container.addEventListener('mouseleave', e => {
e.target.style.visibility = 'hidden' e.target.style.visibility = 'hidden'
e.target.style.display = 'none'
}) })
// 手动处理 tooltip 的显示和隐藏事件,需配合源码理解 // 手动处理 tooltip 的显示和隐藏事件,需配合源码理解
// https://github.com/antvis/G2/blob/master/src/chart/controller/tooltip.ts#showTooltip // https://github.com/antvis/G2/blob/master/src/chart/controller/tooltip.ts#showTooltip
@ -1244,12 +1256,11 @@ export function configPlotTooltipEvent(chart, plot) {
if (!tooltipCtl) { if (!tooltipCtl) {
return return
} }
const event = plot.chart.interactions.tooltip?.context?.event
if (tooltipCtl.tooltip) { if (tooltipCtl.tooltip) {
// 处理视图放大后再关闭 tooltip 的 dom 被清除 // 处理视图放大后再关闭 tooltip 的 dom 被清除
const container = tooltipCtl.tooltip.cfg.container const container = tooltipCtl.tooltip.cfg.container
// 最多铺满屏幕,鼠标移入可滚动 container.style.display = 'block'
container.style.maxHeight = '100%'
container.style.overflow = 'scroll'
const dom = document.getElementById(container.id) const dom = document.getElementById(container.id)
if (!dom) { if (!dom) {
const full = document.getElementsByClassName('fullscreen') const full = document.getElementsByClassName('fullscreen')
@ -1260,7 +1271,6 @@ export function configPlotTooltipEvent(chart, plot) {
} }
} }
} }
const event = plot.chart.interactions.tooltip?.context?.event
plot.chart.getOptions().tooltip.follow = false plot.chart.getOptions().tooltip.follow = false
tooltipCtl.title = Math.random().toString() tooltipCtl.title = Math.random().toString()
plot.chart.getTheme().components.tooltip.x = event.clientX plot.chart.getTheme().components.tooltip.x = event.clientX
@ -1273,6 +1283,10 @@ export function configPlotTooltipEvent(chart, plot) {
return return
} }
plot.chart.getOptions().tooltip.follow = true plot.chart.getOptions().tooltip.follow = true
const container = tooltipCtl.tooltip?.cfg?.container
if (container) {
container.style.display = 'none'
}
tooltipCtl.hideTooltip() tooltipCtl.hideTooltip()
}) })
} }