mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-14 20:00:09 +00:00
优化Axis为Time时间轴时的Tooltip默认效果
This commit is contained in:
@@ -75,8 +75,9 @@ slug: /changelog
|
||||
|
||||
## master
|
||||
|
||||
* (2024.07.14) 优化`Axis`的`Time`时间轴的`splitNumber`为0时的表现
|
||||
* (2024.07.14) 优化`Axis`的`Time`时间轴的滚动表现
|
||||
* (2024.07.16) 优化`Axis`为`Time`时间轴时的`Tooltip`默认效果
|
||||
* (2024.07.15) 优化`Axis`为`Time`时间轴时的分割效果
|
||||
* (2024.07.14) 优化`Axis`为`Time`时间轴时的移动表现
|
||||
* (2024.07.12) 优化`Label`显示体验
|
||||
* (2024.07.06) 修复`Chart`在动态创建时背景没有自适应的问题 (#323)
|
||||
|
||||
|
||||
@@ -571,11 +571,13 @@ namespace XCharts.Runtime
|
||||
var isTriggerByAxis = false;
|
||||
var isTriggerByItem = tooltip.context.trigger == Tooltip.Trigger.Item;
|
||||
var dataIndex = -1;
|
||||
var timestamp = -1;
|
||||
double axisRange = 0;
|
||||
tooltip.context.data.param.Clear();
|
||||
tooltip.context.pointer = GetTooltipPointerPos();
|
||||
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)
|
||||
{
|
||||
isTriggerByAxis = true;
|
||||
@@ -585,7 +587,9 @@ namespace XCharts.Runtime
|
||||
tooltip.context.data.title = series[0].serieName;
|
||||
}
|
||||
else
|
||||
{
|
||||
tooltip.context.data.title = category;
|
||||
}
|
||||
}
|
||||
else if (tooltip.context.trigger == Tooltip.Trigger.Item)
|
||||
{
|
||||
@@ -604,6 +608,15 @@ namespace XCharts.Runtime
|
||||
serie.context.isTriggerByAxis = isTriggerByAxis;
|
||||
if (isTriggerByAxis && dataIndex >= 0 && serie.context.pointerItemDataIndex < 0)
|
||||
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,
|
||||
tooltip.marker, tooltip.itemFormatter, tooltip.numericFormatter,
|
||||
tooltip.ignoreDataDefaultContent,
|
||||
@@ -626,20 +639,28 @@ namespace XCharts.Runtime
|
||||
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)
|
||||
{
|
||||
if (component is Axis)
|
||||
{
|
||||
var axis = component as Axis;
|
||||
if (axis.gridIndex == gridIndex && axis.IsCategory())
|
||||
if (axis.gridIndex == gridIndex)
|
||||
{
|
||||
dataIndex = double.IsNaN(axis.context.pointerValue)
|
||||
? axis.context.dataZoomStartIndex
|
||||
: axis.context.dataZoomStartIndex + (int)axis.context.axisTooltipValue;
|
||||
category = axis.GetData(dataIndex);
|
||||
return true;
|
||||
if (axis.IsCategory())
|
||||
{
|
||||
dataIndex = double.IsNaN(axis.context.pointerValue)
|
||||
? axis.context.dataZoomStartIndex
|
||||
: 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,21 @@ namespace XCharts.Runtime
|
||||
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)
|
||||
{
|
||||
var dateString = String.Empty;
|
||||
@@ -143,19 +158,22 @@ namespace XCharts.Runtime
|
||||
else if (range >= ONE_HOUR * MIN_TIME_SPLIT_NUMBER)
|
||||
{
|
||||
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);
|
||||
}
|
||||
else if (range >= ONE_MINUTE * MIN_TIME_SPLIT_NUMBER)
|
||||
{
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
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);
|
||||
}
|
||||
return tick;
|
||||
|
||||
Reference in New Issue
Block a user