You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React中Lightning Charts(ChartXY)缩放后重置滚动及缩放假框控制方法

解决Lightning Charts实时滚动缩放后异常及缩放假框控制问题

嘿,我之前在React项目里用Lightning Charts的ChartXY做实时数据可视化时,也碰到过一模一样的问题!给你分享两个实用的解决方案:

一、重置缩放回到实时滚动状态

你说的缩小后滚动不遵循设置的3000ms间隔,本质是手动缩放操作修改了X轴的显示范围,打破了渐进滚动(progressive scroll)的自动窗口管理逻辑。要恢复到实时当前点,我们可以通过API手动重置轴的滚动策略和显示范围:

具体实现步骤:

  1. 先在组件里保存Chart和X轴的引用,方便后续调用方法:
import { ChartXY, AxisScrollStrategies, DataPatterns, ColorRGBA } from '@arction/lcjs'
import { useRef, useEffect } from 'react'

const RealTimeChart = () => {
  const chartRef = useRef(null)
  const PROGRESSIVE_WINDOW = 3000 // 你的初始滚动间隔(毫秒)

  useEffect(() => {
    // 初始化图表
    const chart = ChartXY({ container: 'chart-container' })
    const axisX = chart.getDefaultAxisX()
    
    // 设置渐进滚动策略
    axisX.setScrollStrategyProgressive({ windowSize: PROGRESSIVE_WINDOW })
    
    // 设置系列为水平渐进数据模式
    const lineSeries = chart.addLineSeries({
      dataPattern: DataPatterns.horizontalProgressive
    })

    chartRef.current = { chart, axisX }
    
    // 清理函数
    return () => chart.dispose()
  }, [])

  // 重置缩放的核心函数
  const resetToRealTime = () => {
    const { axisX } = chartRef.current
    if (!axisX) return

    // 重新启用渐进滚动并指定窗口大小
    axisX.setScrollStrategyProgressive({ windowSize: PROGRESSIVE_WINDOW })
    // 强制视图适配到最新的实时数据窗口
    axisX.fitView()

    // 如果你需要更精确的控制,也可以手动设置X轴间隔
    // const now = Date.now()
    // axisX.setInterval({ start: now - PROGRESSIVE_WINDOW, end: now })
  }

  return (
    <div>
      {/* 添加一个重置按钮让用户触发 */}
      <button onClick={resetToRealTime} style={{ marginBottom: '10px' }}>
        回到实时视图
      </button>
      <div id="chart-container" style={{ width: '100%', height: '500px' }} />
    </div>
  )
}

export default RealTimeChart

原理说明:

  • 调用setScrollStrategyProgressive重新启用渐进滚动,确保X轴按照你设置的3000ms窗口自动滚动。
  • fitView()方法会让X轴自动调整到包含最新数据的范围,直接回到实时滚动的状态。

二、控制缩放假框的样式与行为

Lightning Charts确实提供了缩放假框的配置项,你可以通过setMouseInteractions()方法来调整它的样式、启用状态甚至缩放方向:

配置示例:

在图表初始化时添加这段代码:

chart.setMouseInteractions({
  zoomRectangle: {
    // 启用/禁用缩放假框(默认是启用的)
    enabled: true,
    // 自定义缩放框的外观
    style: {
      fillStyle: { color: ColorRGBA(100, 180, 255, 0.2) }, // 填充色(半透明)
      strokeStyle: { color: ColorRGBA(0, 120, 220, 1), thickness: 2 } // 边框样式
    },
    // 限制缩放方向(可选:'horizontal' | 'vertical' | undefined)
    restrictDirection: 'horizontal' // 只允许横向缩放,适合实时数据场景
  }
})

常用配置项说明:

  • enabled: false:完全禁用缩放假框,用户无法通过拖拽矩形进行缩放。
  • restrictDirection:限制缩放的方向,比如设置为horizontal后,用户只能拖拽X轴方向的缩放框,避免误操作影响Y轴。
  • style:自定义缩放框的填充色、边框颜色和厚度,让它和你的项目UI风格匹配。

内容的提问来源于stack exchange,提问作者Yash.S.Narang

火山引擎 最新活动