interval.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var util_1 = require("@antv/util");
  4. function snapMultiple(v, base, snapType) {
  5. var div;
  6. if (snapType === 'ceil') {
  7. div = Math.ceil(v / base);
  8. }
  9. else if (snapType === 'floor') {
  10. div = Math.floor(v / base);
  11. }
  12. else {
  13. div = Math.round(v / base);
  14. }
  15. return div * base;
  16. }
  17. function intervalTicks(min, max, interval) {
  18. // 变成 interval 的倍数
  19. var minTick = snapMultiple(min, interval, 'floor');
  20. var maxTick = snapMultiple(max, interval, 'ceil');
  21. // 统一小数位数
  22. minTick = util_1.fixedBase(minTick, interval);
  23. maxTick = util_1.fixedBase(maxTick, interval);
  24. var ticks = [];
  25. // https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors/Invalid_array_length
  26. var availableInterval = Math.max((maxTick - minTick) / (Math.pow(2, 12) - 1), interval);
  27. for (var i = minTick; i <= maxTick; i = i + availableInterval) {
  28. var tickValue = util_1.fixedBase(i, availableInterval); // 防止浮点数加法出现问题
  29. ticks.push(tickValue);
  30. }
  31. return {
  32. min: minTick,
  33. max: maxTick,
  34. ticks: ticks
  35. };
  36. }
  37. exports.default = intervalTicks;
  38. //# sourceMappingURL=interval.js.map