update-scale.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. var Helper = require('../helper');
  2. var Util = require('../../util/common');
  3. module.exports = {
  4. updateLinearScale: function updateLinearScale(field, min, max) {
  5. var chart = this.chart;
  6. var colDef = Helper.getColDef(chart, field);
  7. chart.scale(field, Util.mix({}, colDef, {
  8. min: min,
  9. max: max,
  10. nice: false
  11. }));
  12. },
  13. updateCatScale: function updateCatScale(field, newValues, ticks, values, minIndex, maxIndex) {
  14. var chart = this.chart;
  15. var colDef = Helper.getColDef(chart, field);
  16. chart.scale(field, Util.mix({}, colDef, {
  17. values: newValues,
  18. ticks: ticks,
  19. scale: function scale(value) {
  20. if (this.type === 'timeCat') {
  21. value = this._toTimeStamp(value);
  22. }
  23. var rangeMin = this.rangeMin();
  24. var rangeMax = this.rangeMax();
  25. var range = rangeMax - rangeMin;
  26. var min;
  27. var max;
  28. var percent;
  29. var currentIndex = values.indexOf(value); // 在完整数据集中的索引值
  30. if (currentIndex >= 0 && currentIndex < minIndex) {
  31. // 不在范围内,左侧数据
  32. max = rangeMin > 0 ? -0.1 : rangeMin - 0.1;
  33. min = max - range;
  34. percent = currentIndex / minIndex;
  35. } else if (currentIndex >= 0 && currentIndex > maxIndex) {
  36. // 不在范围内,右侧数据
  37. min = rangeMax < 1 ? 1.1 : rangeMax + 0.1;
  38. max = min + range;
  39. percent = (currentIndex - maxIndex - 1) / (values.length - 1 - maxIndex);
  40. } else {
  41. // 数值在当前 this.values 范围内
  42. var index = this.translate(value);
  43. if (this.values.length === 1) {
  44. percent = index;
  45. } else {
  46. percent = index / (this.values.length - 1);
  47. }
  48. min = rangeMin;
  49. max = rangeMax;
  50. }
  51. return min + percent * (max - min);
  52. },
  53. getTicks: function getTicks() {
  54. var self = this;
  55. var ticks = this.ticks;
  56. var rst = [];
  57. Util.each(ticks, function (tick) {
  58. var obj;
  59. if (Util.isObject(tick)) {
  60. obj = tick;
  61. } else {
  62. var value = self.scale(tick);
  63. value = value >= 0 && value <= 1 ? value : NaN;
  64. obj = {
  65. text: Util.isString(tick) ? tick : self.getText(tick),
  66. value: value,
  67. tickValue: tick // 用于坐标轴上文本动画时确定前后帧的对应关系
  68. };
  69. }
  70. rst.push(obj);
  71. });
  72. return rst;
  73. }
  74. }));
  75. }
  76. };