首页 > 解决方案 > Lightningcharts - 双击重置轴

问题描述

我面临以下问题。当我想设置用户可以放大图表的最小边界时,双击轴停止工作。这里有一段代码可以帮助你理解。函数 HandleScaleChangeY 需要同时滚动多个图表。我究竟做错了什么?

 const HandleScaleChangeY = (yAxisIndex) => {
            return (start, end) => {
                for (let i = 0; i < yAxes.length; i++) {
                    let newStart, newEnd

                    if (start < end) {
                        newStart = end
                        newEnd = start
                    } else {
                        newStart = start
                        newEnd = end
                    }
                    const axis = yAxes[i]

                    if (i !== yAxisIndex && (axis.scale.getInnerStart() !== newStart || axis.scale.getInnerEnd() !== newEnd))
                        if (newStart-newEnd<10000) {
                            axis.setInterval(axis.scale.getInnerStart(), axis.scale.getInnerEnd())
                        } else{
                            axis.setScrollStrategy(undefined)
                                .setInterval(newStart, newEnd)
                        }
                }
            }
        }

for (let i = 0; i < yAxes.length; i++) {
    const yAxis = yAxes[i]
    yAxis.onScaleChange(HandleScaleChangeY(i))
}

问题是条件if (newStart-newEnd<10000)触发后,双击坐标轴停止工作(坐标轴范围没有回到初始状态)

标签: javascriptreactjszoomingdouble-clicklightningchart

解决方案


双击 LCJS 轴“释放”轴,如果它之前被冻结,让它自动滚动。

但是,只有当 Axis 有一个 active 时,它​​才能自动滚动ScrollStrategy

我在您正在使用的代码中看到axis.setScrollStrategy(undefined),这将禁用轴上的所有自动滚动,除非通过设置重新启用:axis.setScrollStrategy(AxisScrollStrategies.fitting)或除undefined.

如果你想设置轴间隔,并暂时冻结它(直到用户双击),你可以这样做:Axis.setInterval(newStart, newEnd, false, true)

..第一个布尔值false控制过渡是否动画,第二个布尔值true控制之后是否冻结轴。


推荐阅读