axisLabelInterval.js 1.8 KB
Newer Older
L
lang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/**
 * Helper function for axisLabelInterval calculation
 */

define(function(require) {
    'use strict';

    var textContain = require('zrender/contain/text');

    return function (axis) {
        var axisModel = axis.model;
        var labelModel = axisModel.getModel('axisLabel');
        var labelInterval = labelModel.get('interval');
        if (
L
lang 已提交
15
            !(axis.type === 'category'
L
lang 已提交
16 17 18 19 20 21 22
            && labelInterval === 'auto'
            && !labelModel.get('rotate'))
        ) {
            return labelInterval === 'auto' ? 0 : labelInterval;
        }

        var ticks = axis.scale.getTicks();
L
lang 已提交
23
        var labels = axisModel.getFormattedLabels();
L
lang 已提交
24 25 26 27 28 29 30
        var font = labelModel.getModel('textStyle').getFont();

        var textSpaceTakenRect;

        var autoLabelInterval = 0;
        var accumulatedLabelInterval = 0;

L
lang 已提交
31 32
        var isAxisHorizontal = axis.isHorizontal();

L
lang 已提交
33 34 35 36 37 38
        for (var i = 0; i < ticks.length; i++) {
            var tick = ticks[i];
            var tickCoord = axis.dataToCoord(tick);
            var rect = textContain.getBoundingRect(
                labels[i], font, 'center', 'top'
            );
L
lang 已提交
39
            rect[isAxisHorizontal ? 'x' : 'y'] += tickCoord;
L
lang 已提交
40
            rect[isAxisHorizontal ? 'width' : 'height'] *= 1.5;
L
lang 已提交
41 42 43 44 45 46
            if (!textSpaceTakenRect) {
                textSpaceTakenRect = rect.clone();
            }
            // There is no space for current label;
            else if (textSpaceTakenRect.intersect(rect)) {
                accumulatedLabelInterval++;
47
                autoLabelInterval = Math.max(autoLabelInterval, accumulatedLabelInterval);
L
lang 已提交
48 49 50
            }
            else {
                textSpaceTakenRect.union(rect);
51 52
                // Reset
                accumulatedLabelInterval = 0;
L
lang 已提交
53 54 55 56
            }
        }

        return autoLabelInterval;
L
lang 已提交
57
    };
L
lang 已提交
58
});