interval.js 1.2 KB

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