圆形边缘Gauge与Highcharts.js

时间:2014-11-26 04:25:53

标签: javascript html html5 svg highcharts

我正在使用Highcharts创建一个自定义量表,窗格形状应该作为附加图片舍入,想知道是否有人知道如何使用库实现此布局

这是我用作http://jsfiddle.net/ao9fv2yh/的起点。

$(function () {

var gaugeOptions = {

    chart: {
        type: 'solidgauge'
    },

    title: null,

    pane: {
        center: ['50%', '85%'],
        size: '140%',
        startAngle: -90,
        endAngle: 90,
        background: {
            backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
            innerRadius: '60%',
            outerRadius: '100%',
            shape: 'arc'
        }
    },

    tooltip: {
        enabled: false
    },

    // the value axis
    yAxis: {
        stops: [
            [0.1, '#55BF3B'], // green
            [0.5, '#DDDF0D'], // yellow
            [0.9, '#DF5353'] // red
        ],
        lineWidth: 0,
        minorTickInterval: null,
        tickPixelInterval: 400,
        tickWidth: 0,
        title: {
            y: -70
        },
        labels: {
            y: 16
        }
    },

    plotOptions: {
        solidgauge: {
            dataLabels: {
                y: 5,
                borderWidth: 0,
                useHTML: true
            }
        }
    }
};

// The speed gauge
$('#container-speed').highcharts(Highcharts.merge(gaugeOptions, {
    yAxis: {
        min: 0,
        max: 200,
        title: {
            text: 'Speed'
        }
    },

    credits: {
        enabled: false
    },

    series: [{
        name: 'Speed',
        data: [80],
        dataLabels: {
            format: '<div style="text-align:center"><span style="font-size:25px;color:' +
                ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y}</span><br/>' +
                   '<span style="font-size:12px;color:silver">km/h</span></div>'
        },
        tooltip: {
            valueSuffix: ' km/h'
        }
    }]

}));

// The RPM gauge
$('#container-rpm').highcharts(Highcharts.merge(gaugeOptions, {
    yAxis: {
        min: 0,
        max: 5,
        title: {
            text: 'RPM'
        }
    },

    series: [{
        name: 'RPM',
        data: [1],
        dataLabels: {
            format: '<div style="text-align:center"><span style="font-size:25px;color:' +
                ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y:.1f}</span><br/>' +
                   '<span style="font-size:12px;color:silver">* 1000 / min</span></div>'
        },
        tooltip: {
            valueSuffix: ' revolutions/min'
        }
    }]

}));

// Bring life to the dials
setInterval(function () {
    // Speed
    var chart = $('#container-speed').highcharts(),
        point,
        newVal,
        inc;

    if (chart) {
        point = chart.series[0].points[0];
        inc = Math.round((Math.random() - 0.5) * 100);
        newVal = point.y + inc;

        if (newVal < 0 || newVal > 200) {
            newVal = point.y - inc;
        }

        point.update(newVal);
    }

    // RPM
    chart = $('#container-rpm').highcharts();
    if (chart) {
        point = chart.series[0].points[0];
        inc = Math.random() - 0.5;
        newVal = point.y + inc;

        if (newVal < 0 || newVal > 5) {
            newVal = point.y - inc;
        }

        point.update(newVal);
    }
}, 2000);

});

这是自定义仪表的布局:

enter image description here

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

为Highcharts创建一个合适的扩展可能更为正确,但是如果你向量规元素添加宽边框并像这样调整SVG,它可能是正确的:

var svg;
svg = document.getElementsByTagName('svg');
if (svg.length > 0) {
    var path = svg[0].getElementsByTagName('path');
    if (path.length > 1) {
        // First path is gauge background
        path[0].setAttributeNS(null, 'stroke-linejoin', 'round');
        // Second path is gauge value
        path[1].setAttributeNS(null, 'stroke-linejoin', 'round');
    }
}

示例:http://jsfiddle.net/Penstrife/1s8sfqtn/

答案 1 :(得分:0)

API中有一个borderRadius选项可以完全满足您的需求。不幸的是,此选项仅适用于列,工具提示,图例,但不适用于solidgauge。这是我能得到的最接近的事情:http://jsfiddle.net/ao9fv2yh/1/