Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
D3.js 防止文本在文本路径上旋转_D3.js_Svg_Text - Fatal编程技术网

D3.js 防止文本在文本路径上旋转

D3.js 防止文本在文本路径上旋转,d3.js,svg,text,D3.js,Svg,Text,我正在用d3.js绘制一个轮盘赌,我需要防止字段中颠倒的数字旋转-因此文本标签应该像摩天轮上的小木屋一样- 我的小提琴- 这是添加文本的摘录 node.append("text") .attr("x", 0) .attr("dy", 12) .attr("fill", "#ffffff") .style("font-size", "10px") .attr("text-anchor", "middle") .append("textPat

我正在用d3.js绘制一个轮盘赌,我需要防止字段中颠倒的数字旋转-因此文本标签应该像摩天轮上的小木屋一样-

我的小提琴-

这是添加文本的摘录

     node.append("text")
    .attr("x", 0)
    .attr("dy", 12)
    .attr("fill", "#ffffff")
    .style("font-size", "10px")
    .attr("text-anchor", "middle")
    .append("textPath")
    .attr("xlink:href", function(d, i) { return "#roulette_field_" + i })
    .text(function(d) { return d[0] })
    .attr("startOffset", 9);
是否可以仅使用textPath元素将文本锚定到其单元格上,而不强制其跟随字段的曲线

如果没有,如何在不旋转的情况下在相应单元中实现正确的放置


我也需要将文本放置在单元格的中间(水平),但是文本锚中间没有工作,而<>代码> StaseOffice=9 < /COD>在Internet Explorer中出错了;p> 如果要将文本作为常规文本水平放置,只需放下

并附加普通文本元素,使用
质心
方法定位它们:

.attr("x", function(d, i) {
    return roulette.centroid(d, i)[0]
})
.attr("y", function(d, i) {
    return roulette.centroid(d, i)[1]
})
以下是更改后的代码:

var nums=[
[“0”、“2e6632”、“50%”,
[“32”、“褐红色”、“80%”,
["15", "#061882", "21%"],
[“19”、“栗色”、“30%”,
["4", "#061882", "10%"],
[“21”、“褐红色”、“25%”,
["2", "#061882", "99%"],
[“25”、“褐红色”、“64%”,
["17", "#061882", "41%"],
[“34”、“褐红色”、“18%”,
["6", "#061882", "29%"],
[“27”、“褐红色”、“78%”],
["13", "#061882", "69%"],
[“36”、“褐红色”、“32%”],
["11", "#061882", "47%"],
[“30”、“栗色”、“88%”],
["8", "#061882", "98%"],
[“23”、“褐红色”、“28%”,
["10", "#061882", "5%"],
[“5”、“栗色”、“3%”,
["24", "#061882", "15%"],
[“16”、“栗色”、“33%”,
["33", "#061882", "83%"],
[“1”、“褐红色”、“54%”],
["20", "#061882", "14%"],
[“14”、“褐红色”、“28%”,
["31", "#061882", "11%"],
[“9”、“褐红色”、“74%”],
["22", "#061882", "3%"],
[“18”、“褐红色”、“3%”,
["29", "#061882", "23%"],
[“7”、“褐红色”、“33%”,
["28", "#061882", "73%"],
[“12”、“褐红色”、“83%”,
["35", "#061882", "93%"],
[“3”、“褐红色”、“23%”,
["26", "#061882", "13%"]
];
var半径=104;
var innerRadius=半径-18;
var canvas=d3.选择(“画布”)
.append(“svg”)
.attr(“宽度”,半径*2)
.attr(“高度”,半径*2);
var canvas2=d3。选择(“canvas2”)
.append(“svg”)
.attr(“宽度”,半径*2)
.attr(“高度”,半径*2);
var增量=Math.PI*2/nums.length//每个切片/字段的长度(弧度)
var半=增加/2//等距半长
var roulette=d3.svg.arc()
.内半径(函数(d,i){
返回半径-18;
})
.外层(功能(d,i){
返回104;
})
.startAngle(功能(d,i){
收益(i*增加)-一半;
})
.端角(功能(d,i){
回报率(增加*(i+1))-一半;
});
var node=canvas.selectAll(“轮盘赌组”)
.数据(nums)
.输入()
.附加(“g”)
.attr(“类”、“轮盘赌组”)
.attr(“id”,函数(d,i){
返回“轮盘赌组”+i
})
.attr(“变换”、“平移”(“+radius+”,“+radius+”));
node.append(“路径”)
.attr(“d”,轮盘赌)
.样式(“填充”,功能(d){
返回d[1];
});
node.append(“文本”)
.attr(“填充”,“#ffffff”)
.style(“字体大小”,“10px”)
.attr(“文本锚定”、“中间”)
.attr(“dy”,“2px”)
.attr(“x”,函数(d,i){
返回轮盘赌。质心(d,i)[0]
})
.attr(“y”,函数(d,i){
返回轮盘赌。质心(d,i)[1]
})
.文本(功能(d){
返回d[0]
});


PS:关于Internet Explorer,祝你好运,在它上面做任何事情……都很有魅力。谢谢你,杰拉尔多。甚至IE的bug也随着你的代码消失了。