javascript - CSS 中的统计圈

标签 javascript html css statistics

我想做这样的事情,但我不知道怎么做。

http://i.imgur.com/cTz7wTm.jpg

我有个想法,但行不通。

<div id="stats">
    <div id="men" class="circle"></div>
    <div id="women" class="circle"></div>
    <div id="white-circle" class="small-circle"></div>
</div>

<style>
#stats {
    width: 100px;
    height: 100px;
    background: white;
    position: relative;
}

.circle {
    border-radius: 100px;
    background: #CCC;
    width: 100px;
    height: 100px;
    position: absolute;
}

.circle#men {
   background: #27ae60; 
}

.circle#women {
   background: #f26646; 
}

.small-circle {
    border-radius: 100px;
    background: white;
    width: 65px;
    height: 65px;
    position: absolute;
    top: 0; bottom: 0; left: 0; right: 0;
    margin: auto;
}
</style>

最佳答案

它实际上被称为 donut chart 。仅使用 div 标签对您来说会很困难。而是使用 canvas 或仅使用 javascript 框架来绘制图表。这里有几个例子。

<canvas></canvas>
  1. Example1
  2. Example2
  3. Example3
  4. Example4

标记

<canvas width="500px" height="250px"></canvas>

JavaScript

$(document).ready(function() {

    var context = $("canvas")[0].getContext("2d");

        var values = '24,43,43,45';
        var segments = values.split(",");
        var segmentColor = 50;
        var total = 0;

        //Reset the canvas
        context.restore();
        context.save();
        context.clearRect(0,0,500,250);

        for (i=0;i<segments.length;i++) {
            total = total + parseFloat(segments[i]);
        }

        var parts = 360/total;
        var startAngle=0

        context.translate(100,100)
        context.rotate(270*(Math.PI/180)); //Turn the chart around so the segments start from 12 o'clock

        for (i=0;i<segments.length;i++) {

            //Draw the segments
            context.fillStyle ="rgb(" + segmentColor + "," + segmentColor + "," + segmentColor + ")";
            context.beginPath();
            context.moveTo(0,0);
            context.arc(0,0,100,startAngle*(Math.PI/180),(startAngle + parseFloat(segments[i]*parts))*(Math.PI/180),false);
            context.lineTo(0,0);
            context.closePath();
            context.fill();

            startAngle = startAngle + parseFloat(segments[i]*parts);
            segmentColor = segmentColor + 20;   
        }

            //Turn into a donut!!                   
            context.fillStyle = "White";
            context.beginPath();
            context.arc(0,0,60,0,Math.PI*2,false);
            context.closePath();
            context.fill();                 


});

注意:var values = '24,43,43,45';//这将基本上把圆分成 4 部分 演示:http://jsfiddle.net/Zgfb6/

关于javascript - CSS 中的统计圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18203711/

相关文章:

javascript - 在 Rails 4 App 上通过相对路径调用 Slider Revolution 资源

javascript - 使用 JavaScript 多次追加一个节点只会追加一次

html - 只有中间的div固定宽度,三个div如何展开父元素?

javascript - 如何阻止用户输入某些字符?

css - ie7底部滚动条 hell

php - 将 mysql 结果分组到两个单独的 div 中

javascript - 相当于 Promise 的 async 函数

javascript - 在文本输入框中添加 block ,类似于电子邮件应用程序到字段

javascript - 我怎样才能开发一个没有跳跃的响应式和粘性导航栏?

jquery 可排序 : change the css of current drag item