Donut grafy

02.06.2018 Programování #javascript #html #scss #donutchart

Jednoduchá aplikace na vytvoření donut grafů, pomocí CSS a javascriptu.


HTML kód

<div class="tiny-chartbox">
    <div
        id="failureChart1",
        chart-type="donut",
        data-chart-max="6",
        data-chart-segments="{ '0':['0','2','#19C5F5'] }",
        data-chart-text="2", 
        data-chart-caption="Prodyšnost",
        data-chart-initial-rotate="0">
    </div>

    <div
        id="failureChart2",
        chart-type="donut",
        data-chart-max="6",
        data-chart-segments="{ '0':['0','4','#19C5F5'] }",
        data-chart-text="4", 
        data-chart-caption="Větrnost",
        data-chart-initial-rotate="0">
    </div>

</div>

Lze využít předdefinovaných stylů pro různé velikosti grafů: tiny-chartbox, large-chartbox, huge-chartbox, giant-chartbox.

Zápis hodnot grafu je uveden v atributu data-chart-segment="{ "0":["0","1400","#F18605"], "1":["1400","600", "#ecebeb"] }"

Javascript kód

function createDonutCharts() {
    $("<style type='text/css' id='dynamic' />").appendTo("head");
    $("div[chart-type*=donut]").each(function () {
        var d = $(this);
        var id = $(this).attr('id');
        var max = $(this).data('chart-max');
        if ($(this).data('chart-text')) {
            var text = $(this).data('chart-text');
        } else {
            var text = "";
        }
        if ($(this).data('chart-caption')) {
            var caption = $(this).data('chart-caption');
        } else {
            var caption = "";
        }
        if ($(this).data('chart-initial-rotate')) {
            var rotate = $(this).data('chart-initial-rotate');
        } else {
            var rotate = 0;
        }
        var segments = $(this).data('chart-segments');

        for (var i = 0; i < Object.keys(segments).length; i++) {
            var s = segments[i];
            var start = ((s[0] / max) * 360) + rotate;
            var deg = ((s[1] / max) * 360);
            if (s[1] >= (max / 2)) {
                d.append('<div class="large donut-bite" data-segment-index="' + i + '"> ');
            } else {
                d.append('<div class="donut-bite" data-segment-index="' + i + '"> ');
            }
            var style = $("#dynamic").text() + "#" + id + " .donut-bite[data-segment-index=\"" + i + "\"]{-moz-transform:rotate(" + start + "deg);-ms-transform:rotate(" + start + "deg);-webkit-transform:rotate(" + start + "deg);-o-transform:rotate(" + start + "deg);transform:rotate(" + start + "deg);}#" + id + " .donut-bite[data-segment-index=\"" + i + "\"]:BEFORE{-moz-transform:rotate(" + deg + "deg);-ms-transform:rotate(" + deg + "deg);-webkit-transform:rotate(" + deg + "deg);-o-transform:rotate(" + deg + "deg);transform:rotate(" + deg + "deg); background-color: " + s[2] + ";}#" + id + " .donut-bite[data-segment-index=\"" + i + "\"]:BEFORE{ background-color: " + s[2] + ";}#" + id + " .donut-bite[data-segment-index=\"" + i + "\"].large:AFTER{ background-color: " + s[2] + ";}";
            $("#dynamic").text(style);
        }

        d.children().first().before("<div class='donut-hole'><span class='donut-filling'>" + text + "</span></div>");
        d.append("<div class='donut-caption-wrapper'><span class='donut-caption'>" + caption + "</span></div>");
    });
}

$(document).ready(function() {
    createDonutCharts();
});

SCSS kód

Ke stažení v četně všech předchozích souborů. Download