diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index 1411effe..9eafac57 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -81,6 +81,7 @@ slug: /changelog ## master +* (2026.05.17) 修复`DataZoom`点击时指示区域不准的问题 * (2026.05.17) 增加`Legend`的`Width`和`Height`可设置固定宽高 * (2026.05.17) 修复`Serie`的`EndLabel`在`Y`轴是`MinMax`类型时显示的数值不对的问题 * (2026.05.16) 修复`Candlestick`按昨收判断涨跌颜色,一字涨停/跌停显示不对的问题 (#362) diff --git a/Runtime/Component/DataZoom/DataZoomHandler.cs b/Runtime/Component/DataZoom/DataZoomHandler.cs index ec621a58..4d66bfb0 100644 --- a/Runtime/Component/DataZoom/DataZoomHandler.cs +++ b/Runtime/Component/DataZoom/DataZoomHandler.cs @@ -255,22 +255,47 @@ namespace XCharts.Runtime if (dataZoom.IsInZoom(localPos) && !dataZoom.IsInSelectedZoom(localPos)) { - var pointerX = localPos.x; - var selectWidth = grid.context.width * (dataZoom.end - dataZoom.start) / 100; - var startX = pointerX - selectWidth / 2; - var endX = pointerX + selectWidth / 2; - if (startX < grid.context.x) + var start = dataZoom.start; + var end = dataZoom.end; + switch (dataZoom.orient) { - startX = grid.context.x; - endX = grid.context.x + selectWidth; + case Orient.Horizonal: + var pointerX = localPos.x; + var selectWidth = dataZoom.context.width * (dataZoom.end - dataZoom.start) / 100; + var startX = pointerX - selectWidth / 2; + var endX = pointerX + selectWidth / 2; + if (startX < dataZoom.context.x) + { + startX = dataZoom.context.x; + endX = dataZoom.context.x + selectWidth; + } + else if (endX > dataZoom.context.x + dataZoom.context.width) + { + endX = dataZoom.context.x + dataZoom.context.width; + startX = dataZoom.context.x + dataZoom.context.width - selectWidth; + } + start = (startX - dataZoom.context.x) / dataZoom.context.width * 100; + end = (endX - dataZoom.context.x) / dataZoom.context.width * 100; + break; + case Orient.Vertical: + var pointerY = localPos.y; + var selectHeight = dataZoom.context.height * (dataZoom.end - dataZoom.start) / 100; + var startY = pointerY - selectHeight / 2; + var endY = pointerY + selectHeight / 2; + if (startY < dataZoom.context.y) + { + startY = dataZoom.context.y; + endY = dataZoom.context.y + selectHeight; + } + else if (endY > dataZoom.context.y + dataZoom.context.height) + { + endY = dataZoom.context.y + dataZoom.context.height; + startY = dataZoom.context.y + dataZoom.context.height - selectHeight; + } + start = (startY - dataZoom.context.y) / dataZoom.context.height * 100; + end = (endY - dataZoom.context.y) / dataZoom.context.height * 100; + break; } - else if (endX > grid.context.x + grid.context.width) - { - endX = grid.context.x + grid.context.width; - startX = grid.context.x + grid.context.width - selectWidth; - } - var start = (startX - grid.context.x) / grid.context.width * 100; - var end = (endX - grid.context.x) / grid.context.width * 100; UpdateDataZoomRange(dataZoom, start, end, grid); } }