Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将有角度的D3甜甜圈分成两部分_Javascript_Css_Angularjs_D3.js_Angular Directive - Fatal编程技术网

Javascript 将有角度的D3甜甜圈分成两部分

Javascript 将有角度的D3甜甜圈分成两部分,javascript,css,angularjs,d3.js,angular-directive,Javascript,Css,Angularjs,D3.js,Angular Directive,我使用Angular和D3显示圆环图,请参见plunker: 从上面可以看到,在指令mark up中,我传递了一个参数,表示甜甜圈应该填充多少:percent=“80” 我怎样才能修改它来显示80%的,20%的,比如说不同的颜色或图案 例如: app.directive('myDirective',function(){ 返回{ 限制:'E', 范围:{ 半径:'=', 百分比:“=”, 文本:“=”, }, 链接:函数(范围、元素、属性){ 变量半径=范围半径, 百分比=范围百分比, per

我使用Angular和D3显示圆环图,请参见plunker:

从上面可以看到,在指令mark up中,我传递了一个参数,表示甜甜圈应该填充多少:percent=“80”

我怎样才能修改它来显示80%的,20%的,比如说不同的颜色或图案

例如:


app.directive('myDirective',function(){
返回{
限制:'E',
范围:{
半径:'=',
百分比:“=”,
文本:“=”,
},
链接:函数(范围、元素、属性){
变量半径=范围半径,
百分比=范围百分比,
percentLabel=scope.text,
格式=d3.格式(“.0%”),
进度=0;
var svg=d3.select(元素[0])
.append('svg')
.style('width',radius/2+'px')
.样式(“高度”,半径/2+“px”);
var donutScale=d3.scale.linear()
.domain([01100])
.range([0,2*Math.PI]);
var color=“红色”;
风险值数据=[
[0100,#b8b5b8”],
[0,0,颜色]
];
var arc=d3.svg.arc()
.内半径(半径/6)
.外部(半径/4)
.startAngle(函数(d){return donutScale(d[0]);})
.endAngle(函数(d){return donutScale(d[1]);});
var text=svg.append(“文本”)
.attr(“x”,半径/4)
.attr(“y”,半径/4)
.attr(“dy”,“.35em”)
.attr(“文本锚定”、“中间”)
.attr(“字体大小”、“14px”)
.样式(“填充”、“白色”)
.attr(“文本锚定”、“中间”)
.文本(百分比标签);
var path=svg.selectAll(“路径”)
.数据(数据)
.输入()
.append(“路径”)
.style(“fill”,函数(d){返回d[2];})
.attr(“d”,弧)
.每个功能(d){
这是。_电流=d;
//console.log(此.\u当前)
});
//更新数据!
数据=[
[0100,#b8b5b8”],
[0,百分比,颜色]
];
路径
.数据(数据)
.attr(“变换”、“平移”(“+radius/4+”,“+radius/4+”)
.过渡(200).持续时间(2150).缓和(“线性”)
.attrTween(“d”,函数(a){
var i=d3.内插(该电流为a);
var i2=d3.插值(进度,百分比)
该电流=i(0);
//console.log(这个是当前的);
返回函数(t){
文本(格式(i2(t)/100));
返回弧(i(t));
};
});
}
};
});
<my-directive radius="250" percent="80" pending="20" text="hello"></my-directive>

app.directive('myDirective', function() {
    return {
        restrict: 'E',
        scope: {
            radius: '=',
            percent: '=',
            text: '=',
        },
        link: function(scope, element, attrs) {
            var radius = scope.radius,
                percent = scope.percent,
                percentLabel = scope.text,
                format = d3.format(".0%"),
                progress = 0;

            var svg = d3.select(element[0])
                .append('svg')
                .style('width', radius/2+'px')
                .style('height', radius/2+'px');

            var donutScale = d3.scale.linear()
                .domain([0, 100])
                .range([0, 2 * Math.PI]);

            var color = "red";

            var data = [
                [0,100,"#b8b5b8"],
                [0,0,color]
            ];

            var arc = d3.svg.arc()
                .innerRadius(radius/6)
                .outerRadius(radius/4)
                .startAngle(function(d){return donutScale(d[0]);})
                .endAngle(function(d){return donutScale(d[1]);});

            var text = svg.append("text")
                .attr("x",radius/4)
                .attr("y",radius/4)
                .attr("dy", ".35em")
                .attr("text-anchor", "middle")
                .attr("font-size","14px")
                .style("fill","white")
                .attr("text-anchor", "middle")
                .text(percentLabel);

            var path = svg.selectAll("path")
                .data(data)
                .enter()
                .append("path")
                .style("fill", function(d){return d[2];})
                .attr("d", arc)
                .each(function(d) {
                    this._current = d;
                    // console.log(this._current)
                });

            // update the data!
            data = [
                [0,100,"#b8b5b8"],
                [0,percent,color]
            ];

            path
                .data(data)
                .attr("transform", "translate("+radius/4+","+radius/4+")")
                .transition(200).duration(2150).ease('linear')
                .attrTween("d", function (a) {
                    var i  = d3.interpolate(this._current, a);
                    var i2 = d3.interpolate(progress, percent)
                    this._current = i(0);
                    // console.log(this._current);
                    return function(t) {
                        text.text( format(i2(t) / 100) );
                        return arc(i(t));
                    };
                });
        }
    };
});