Highcharts Stock:缩放或调用setExtremes后将视图首个值设为0
缩放交互下的系列值重置与恢复方案
需求明确
- 存在两个初始值为0的数据系列
- 首次缩放:将当前视图内的系列初始值设为0
- 再次缩放:先恢复所有之前被改为0的项的原始值,再将新视图内的系列初始值设为0
实现思路
- 为每个系列项维护原始值存储字段:用于记录项的真实初始值,避免多次修改后丢失数据
- 维护修改记录集合:记录上一次缩放时被修改的项,方便下次缩放时快速恢复
- 缩放触发时执行流程:
- 遍历修改记录集合,将所有项恢复为原始值
- 清空修改记录集合
- 定位当前视图内的系列项,将它们的当前值设为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
相关产品推荐
相关产品推荐

