update-scale.js 2.5 KB

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