【问题标题】:Kendoui- set color in chart dynamicallyKendo Ui-动态设置图表中的颜色
【发布时间】:2016-02-01 20:52:51
【问题描述】:

当我们使用 KendoUI 时,我们需要指定图表的背景颜色。像这样:

{
      category: "Latin America",
      value: 16.3,
      color: "#068c35"
}

请参阅下面的完整代码或示例here。我想知道,不是为每个组件指定背景色,而是可以设置基色,然后 kendoui 将使用基色的变化并为剩余组件设置背景色。

<!DOCTYPE html>
<html>
<head>
    <base href="http://demos.telerik.com/kendo-ui/donut-charts/index">
    <style>html { font-size: 14px; font-family: Arial, Helvetica, sans-serif; }</style>
    <title></title>
    <link rel="stylesheet" href="//kendo.cdn.telerik.com/2016.1.112/styles/kendo.common-material.min.css" />
    <link rel="stylesheet" href="//kendo.cdn.telerik.com/2016.1.112/styles/kendo.material.min.css" />

    <script src="//kendo.cdn.telerik.com/2016.1.112/js/jquery.min.js"></script>
    <script src="//kendo.cdn.telerik.com/2016.1.112/js/kendo.all.min.js"></script>
</head>
<body>
<div id="example">
    <div class="demo-section k-content wide">
        <div id="chart" style="background: center no-repeat url('../content/shared/styles/world-map.png');"></div>
    </div>
    <script>
        function createChart() {
            $("#chart").kendoChart({
                title: {
                    position: "bottom",
                    text: "Share of Internet Population Growth"
                },
                legend: {
                    visible: false
                },
                chartArea: {
                    background: ""
                },
                seriesDefaults: {
                    type: "donut",
                    startAngle: 150
                },
                series: [{
                    name: "2011",
                    data: [{
                        category: "Asia",
                        value: 30.8,
                        color: "#9de219"
                    },{
                        category: "Europe",
                        value: 21.1,
                        color: "#90cc38"
                    },{
                        category: "Latin America",
                        value: 16.3,
                        color: "#068c35"
                    },{
                        category: "Africa",
                        value: 17.6,
                        color: "#006634"
                    },{
                        category: "Middle East",
                        value: 9.2,
                        color: "#004d38"
                    },{
                        category: "North America",
                        value: 4.6,
                        color: "#033939"
                    }]
                }, {
                    name: "2012",
                    data: [{
                        category: "Asia",
                        value: 53.8,
                        color: "#9de219"
                    },{
                        category: "Europe",
                        value: 16.1,
                        color: "#90cc38"
                    },{
                        category: "Latin America",
                        value: 11.3,
                        color: "#068c35"
                    },{
                        category: "Africa",
                        value: 9.6,
                        color: "#006634"
                    },{
                        category: "Middle East",
                        value: 5.2,
                        color: "#004d38"
                    },{
                        category: "North America",
                        value: 3.6,
                        color: "#033939"
                    }],
                    labels: {
                        visible: true,
                        background: "transparent",
                        position: "outsideEnd",
                        template: "#= category #: \n #= value#%"
                    }
                }],
                tooltip: {
                    visible: true,
                    template: "#= category # (#= series.name #): #= value #%"
                }
            });
        }

        $(document).ready(createChart);
        $(document).bind("kendo:skinChange", createChart);
    </script>
</div>


</body>
</html>

【问题讨论】:

    标签: kendo-ui dojo telerik kendo-chart


    【解决方案1】:

    根据@ademar 的回答,我更新了solution

    这就是GetColor 函数的样子

     var color = "#2b577011";
          var percent = -20;
          function GetColor(val)
          {
                var R = parseInt(color.substring(1,3),16);
                var G = parseInt(color.substring(3,5),16);
                var B = parseInt(color.substring(5,7),16);
    
                R = parseInt(R * (100 + percent) / 100);
                G = parseInt(G * (100 + percent) / 100);
                B = parseInt(B * (100 + percent) / 100);
    
                R = (R<255)?R:255;  
                G = (G<255)?G:255;  
                B = (B<255)?B:255;  
    
                var RR = ((R.toString(16).length==1)?"0"+R.toString(16):R.toString(16));
                var GG = ((G.toString(16).length==1)?"0"+G.toString(16):G.toString(16));
                var BB = ((B.toString(16).length==1)?"0"+B.toString(16):B.toString(16));
    
                color = "#"+RR+GG+BB;
                return color;
          }
    

    这里是完整的代码:

    <!DOCTYPE html>
    <html>
    <head>
        <base href="http://demos.telerik.com/kendo-ui/donut-charts/index">
        <style>html { font-size: 14px; font-family: Arial, Helvetica, sans-serif; }</style>
        <title></title>
        <link rel="stylesheet" href="//kendo.cdn.telerik.com/2016.1.112/styles/kendo.common-material.min.css" />
        <link rel="stylesheet" href="//kendo.cdn.telerik.com/2016.1.112/styles/kendo.material.min.css" />
    
        <script src="//kendo.cdn.telerik.com/2016.1.112/js/jquery.min.js"></script>
        <script src="//kendo.cdn.telerik.com/2016.1.112/js/kendo.all.min.js"></script>
    </head>
    <body>
    <div id="example">
        <div class="demo-section k-content wide">
            <div id="chart" style="background: center no-repeat url('../content/shared/styles/world-map.png');"></div>
        </div>
        <script>
            function createChart() {
                $("#chart").kendoChart({
                    title: {
                        position: "bottom",
                        text: "Share of Internet Population Growth"
                    },
                    legend: {
                        visible: false
                    },
                    chartArea: {
                        background: ""
                    },
                    seriesDefaults: {
                        type: "donut",
                        startAngle: 150
                    },
                    series: [{
                        name: "2012",
                        data: [{
                            category: "Asia",
                            value: 53.8,
                            color: GetColor
                        },{
                            category: "Europe",
                            value: 16.1,
                            color: GetColor
                        },{
                            category: "Latin America",
                            value: 11.3,
                            color: GetColor
                        },{
                            category: "Africa",
                            value: 9.6,
                            color: GetColor
                        },{
                            category: "Middle East",
                            value: 5.2,
                            color:GetColor
                        },{
                            category: "North America",
                            value: 3.6,
                            color: GetColor
                        }],
                        labels: {
                            visible: true,
                            background: "transparent",
                            position: "outsideEnd",
                            template: "#= category #: \n #= value#%"
                        }
                    }],
                    tooltip: {
                        visible: true,
                        template: "#= category # (#= series.name #): #= value #%"
                    }
                });
            }
    
            $(document).ready(createChart);
            $(document).bind("kendo:skinChange", createChart);
    
          var color = "#63C6FF";
          var percent = -20;
          function GetColor(val)
          {
    
                var R = parseInt(color.substring(1,3),16);
                var G = parseInt(color.substring(3,5),16);
                var B = parseInt(color.substring(5,7),16);
    
                R = parseInt(R * (100 + percent) / 100);
                G = parseInt(G * (100 + percent) / 100);
                B = parseInt(B * (100 + percent) / 100);
    
                R = (R<255)?R:255;  
                G = (G<255)?G:255;  
                B = (B<255)?B:255;  
    
                var RR = ((R.toString(16).length==1)?"0"+R.toString(16):R.toString(16));
                var GG = ((G.toString(16).length==1)?"0"+G.toString(16):G.toString(16));
                var BB = ((B.toString(16).length==1)?"0"+B.toString(16):B.toString(16));
    
                color = "#"+RR+GG+BB;
                return color;
          }
        </script>
    </div>
    
    
    </body>
    </html>
    

    【讨论】:

    • 这段代码对我来说毫无意义——GetColor 方法采用了一个参数val,它莫名其妙地从未使用过
    【解决方案2】:

    你可以在那里使用js函数和逻辑。

    {
        category: "Africa",
        value: 17.6,
        color: GetColor
    }
    

    example here

    这就是你要找的吗?

    【讨论】:

    • 它接近我想要的,但我希望只指定一种基色。并且基于该颜色,系统应该为剩余的组件选择颜色。目前您已经指定了多种颜色(红色、蓝色、绿色)。如果您能解释这是如何工作的,那就太好了。投票选出有用的答案!!
    • 好吧,它是如何工作的:有一个带颜色的数组(索引 0,1 和 2)。每次调用它时,我都会执行 3 的模运算(因此它总是会在数组的边界返回数字)以返回一个值和递增变量。正如您在问题帖子中发布的那样,可以在字符串中指定剑道中的颜色属性。所以函数只是返回 kendo 可接受的字符串中的颜色......对于你的基本颜色功能:我不明白你的意思。指定例如绿色,然后为每个“馅饼的一部分”生成更少的绿色和更少的绿色?基于价值还是随机?
    猜你喜欢
    • 2018-10-23
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2021-12-05
    相关资源
    最近更新 更多