You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Highcharts Stock:缩放或调用setExtremes后将视图首个值设为0

缩放交互下的系列值重置与恢复方案

需求明确

  • 存在两个初始值为0的数据系列
  • 首次缩放:将当前视图内的系列初始值设为0
  • 再次缩放:先恢复所有之前被改为0的项的原始值,再将新视图内的系列初始值设为0

实现思路

  • 为每个系列项维护原始值存储字段:用于记录项的真实初始值,避免多次修改后丢失数据
  • 维护修改记录集合:记录上一次缩放时被修改的项,方便下次缩放时快速恢复
  • 缩放触发时执行流程:
    1. 遍历修改记录集合,将所有项恢复为原始值
    2. 清空修改记录集合
    3. 定位当前视图内的系列项,将它们的当前值设为0,并将这些项加入修改记录集合

代码示例(JavaScript)

// 初始化两个数据系列,每个项包含原始值和当前值
const dataSeries = [
  { id: 'seriesA', originalValue: 0, currentValue: 0 },
  { id: 'seriesB', originalValue: 0, currentValue: 0 }
];
// 记录上一次缩放被修改的项ID
let lastModifiedIds = new Set();

// 缩放触发处理函数,参数为当前视图包含的项ID数组
function onZoom(currentViewIds) {
  // 1. 恢复上一次修改的项
  lastModifiedIds.forEach(id => {
    const item = dataSeries.find(s => s.id === id);
    if (item) item.currentValue = item.originalValue;
  });
  lastModifiedIds.clear();

  // 2. 设置当前视图项的当前值为0
  currentViewIds.forEach(id => {
    const item = dataSeries.find(s => s.id === id);
    if (item) {
      // 若当前值已被修改,先更新原始值(适配后续非0初始值场景)
      if (item.currentValue !== item.originalValue) {
        item.originalValue = item.currentValue;
      }
      item.currentValue = 0;
      lastModifiedIds.add(id);
    }
  });
}

逻辑说明

  • 每次缩放优先回滚上一次的修改,确保数据状态的一致性
  • 原始值字段持久化项的真实初始数据,即使后续项被多次修改也能准确恢复
  • 使用集合存储修改记录,保证恢复和记录操作的高效性

内容的提问来源于stack exchange,提问作者Massimo di Segni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:47:15