优化AxisTime时间轴时的Tooltip默认效果

This commit is contained in:
monitor1394
2024-07-16 23:03:31 +08:00
parent c458846990
commit d5fbd33534
3 changed files with 53 additions and 13 deletions

View File

@@ -75,8 +75,9 @@ slug: /changelog
## master ## master
* (2024.07.14) 优化`Axis``Time`时间轴的`splitNumber`为0时的表现 * (2024.07.16) 优化`Axis``Time`时间轴`Tooltip`默认效果
* (2024.07.14) 优化`Axis``Time`时间轴的滚动表现 * (2024.07.15) 优化`Axis``Time`时间轴时的分割效果
* (2024.07.14) 优化`Axis``Time`时间轴时的移动表现
* (2024.07.12) 优化`Label`显示体验 * (2024.07.12) 优化`Label`显示体验
* (2024.07.06) 修复`Chart`在动态创建时背景没有自适应的问题 (#323) * (2024.07.06) 修复`Chart`在动态创建时背景没有自适应的问题 (#323)

View File

@@ -571,11 +571,13 @@ namespace XCharts.Runtime
var isTriggerByAxis = false; var isTriggerByAxis = false;
var isTriggerByItem = tooltip.context.trigger == Tooltip.Trigger.Item; var isTriggerByItem = tooltip.context.trigger == Tooltip.Trigger.Item;
var dataIndex = -1; var dataIndex = -1;
var timestamp = -1;
double axisRange = 0;
tooltip.context.data.param.Clear(); tooltip.context.data.param.Clear();
tooltip.context.pointer = GetTooltipPointerPos(); tooltip.context.pointer = GetTooltipPointerPos();
if (m_PointerContainer is GridCoord) if (m_PointerContainer is GridCoord)
{ {
GetAxisCategory(m_PointerContainer.index, ref dataIndex, ref category); GetAxisCategory(m_PointerContainer.index, ref dataIndex, ref category, ref timestamp, ref axisRange);
if (tooltip.context.trigger == Tooltip.Trigger.Axis) if (tooltip.context.trigger == Tooltip.Trigger.Axis)
{ {
isTriggerByAxis = true; isTriggerByAxis = true;
@@ -585,7 +587,9 @@ namespace XCharts.Runtime
tooltip.context.data.title = series[0].serieName; tooltip.context.data.title = series[0].serieName;
} }
else else
{
tooltip.context.data.title = category; tooltip.context.data.title = category;
}
} }
else if (tooltip.context.trigger == Tooltip.Trigger.Item) else if (tooltip.context.trigger == Tooltip.Trigger.Item)
{ {
@@ -604,6 +608,15 @@ namespace XCharts.Runtime
serie.context.isTriggerByAxis = isTriggerByAxis; serie.context.isTriggerByAxis = isTriggerByAxis;
if (isTriggerByAxis && dataIndex >= 0 && serie.context.pointerItemDataIndex < 0) if (isTriggerByAxis && dataIndex >= 0 && serie.context.pointerItemDataIndex < 0)
serie.context.pointerItemDataIndex = dataIndex; serie.context.pointerItemDataIndex = dataIndex;
if (timestamp >= 0)
{
showCategory = false;
var serieData = serie.GetSerieData(serie.context.pointerItemDataIndex);
if (serieData != null)
{
tooltip.context.data.title = DateTimeUtil.GetDefaultDateTimeString((int)serieData.GetData(0), axisRange);
}
}
serie.handler.UpdateTooltipSerieParams(dataIndex, showCategory, category, serie.handler.UpdateTooltipSerieParams(dataIndex, showCategory, category,
tooltip.marker, tooltip.itemFormatter, tooltip.numericFormatter, tooltip.marker, tooltip.itemFormatter, tooltip.numericFormatter,
tooltip.ignoreDataDefaultContent, tooltip.ignoreDataDefaultContent,
@@ -626,20 +639,28 @@ namespace XCharts.Runtime
return false; return false;
} }
private bool GetAxisCategory(int gridIndex, ref int dataIndex, ref string category) private bool GetAxisCategory(int gridIndex, ref int dataIndex, ref string category, ref int timestamp, ref double axisRange)
{ {
foreach (var component in chart.components) foreach (var component in chart.components)
{ {
if (component is Axis) if (component is Axis)
{ {
var axis = component as Axis; var axis = component as Axis;
if (axis.gridIndex == gridIndex && axis.IsCategory()) if (axis.gridIndex == gridIndex)
{ {
dataIndex = double.IsNaN(axis.context.pointerValue) if (axis.IsCategory())
? axis.context.dataZoomStartIndex {
: axis.context.dataZoomStartIndex + (int)axis.context.axisTooltipValue; dataIndex = double.IsNaN(axis.context.pointerValue)
category = axis.GetData(dataIndex); ? axis.context.dataZoomStartIndex
return true; : axis.context.dataZoomStartIndex + (int)axis.context.axisTooltipValue;
category = axis.GetData(dataIndex);
return true;
}
else if (axis.IsTime())
{
timestamp = (int)axis.context.pointerValue;
axisRange = axis.context.minMaxRange;
}
} }
} }
} }

View File

@@ -59,6 +59,21 @@ namespace XCharts.Runtime
return k_DateTime1970.AddSeconds(timestamp); return k_DateTime1970.AddSeconds(timestamp);
} }
public static string GetDefaultDateTimeString(int timestamp, double range = 0)
{
var dateString = String.Empty;
var dateTime = GetDateTime(timestamp);
if (range <= 0 || range >= DateTimeUtil.ONE_DAY)
{
dateString = dateTime.ToString("yyyy-MM-dd");
}
else
{
dateString = dateTime.ToString(s_SecondDateFormatter);
}
return dateString;
}
internal static string GetDateTimeFormatString(DateTime dateTime, double range) internal static string GetDateTimeFormatString(DateTime dateTime, double range)
{ {
var dateString = String.Empty; var dateString = String.Empty;
@@ -143,19 +158,22 @@ namespace XCharts.Runtime
else if (range >= ONE_HOUR * MIN_TIME_SPLIT_NUMBER) else if (range >= ONE_HOUR * MIN_TIME_SPLIT_NUMBER)
{ {
tick = GetTickSecond(range, splitNumber, ONE_HOUR); tick = GetTickSecond(range, splitNumber, ONE_HOUR);
var startTimestamp = (minTimestamp - minTimestamp % tick) + tick; var let = minTimestamp % tick;
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick); AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
} }
else if (range >= ONE_MINUTE * MIN_TIME_SPLIT_NUMBER) else if (range >= ONE_MINUTE * MIN_TIME_SPLIT_NUMBER)
{ {
tick = GetTickSecond(range, splitNumber, ONE_MINUTE); tick = GetTickSecond(range, splitNumber, ONE_MINUTE);
var startTimestamp = (minTimestamp - minTimestamp % tick) + tick; var let = minTimestamp % tick;
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick); AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
} }
else else
{ {
tick = GetTickSecond(range, splitNumber, ONE_SECOND); tick = GetTickSecond(range, splitNumber, ONE_SECOND);
var startTimestamp = (minTimestamp - minTimestamp % tick) + tick; var let = minTimestamp % tick;
var startTimestamp = let == 0 ? minTimestamp : (minTimestamp - let) + tick;
AddTickTimestamp(list, startTimestamp, maxTimestamp, tick); AddTickTimestamp(list, startTimestamp, maxTimestamp, tick);
} }
return tick; return tick;