Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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 Raphael.js在路径上居中显示文本_Javascript_Raphael - Fatal编程技术网

Javascript Raphael.js在路径上居中显示文本

Javascript Raphael.js在路径上居中显示文本,javascript,raphael,Javascript,Raphael,我所拥有的: 沿圆形路径的文本。它使用Raphael.js和一个名为textOnPath的函数,可在此处找到:: JSFiddle: 我需要的是: 要在圆圈顶部居中的文本 我的做法: 尝试根据圆弧大小和文字宽度计算文字的起始位置。我试图通过使用text函数创建它的不可见克隆来计算文本宽度,并得到它的BBox宽度 它不太管用,结果因web浏览器、使用的字体以及字母和空格的数量而异: var length = r.text(100,400,message) .attr({"font-size":fo

我所拥有的: 沿圆形路径的文本。它使用Raphael.js和一个名为textOnPath的函数,可在此处找到::

JSFiddle:

我需要的是: 要在圆圈顶部居中的文本

我的做法: 尝试根据圆弧大小和文字宽度计算文字的起始位置。我试图通过使用text函数创建它的不可见克隆来计算文本宽度,并得到它的BBox宽度

它不太管用,结果因web浏览器、使用的字体以及字母和空格的数量而异:

var length = r.text(100,400,message)
.attr({"font-size":fontSize,'opacity': 0, 'font-family': fontFamily})
.getBBox()
.width;

var point = (Math.PI*radius - length*fontSpacing)/2;
JSFiddle:


有人能给我指出正确的方向吗?

IMHO,最简单的方法是创建额外的辅助路径,该路径将文本大小提高一半

此外,我发现定义一个圆,然后以指定角度获取点更方便:

var Circle = function(cx, cy, r) {
   return function (a) {
      return {
         x: cx + r*Math.sin(Math.PI*-a/180),
         y: cy - r*Math.cos(Math.PI*-a/180)
      }
   }
};

你不需要用pi做任何特定于弧的事情;messageLength、path.getTotalLength和path.getPointAtLength应该是您所需要的全部-应该更简单,可以在任何路径上工作,而不仅仅是圆弧。我添加了一个JSBIN,它在解决这个问题的过程中占了75%,并考虑了还需要做哪些工作。
var Circle = function(cx, cy, r) {
   return function (a) {
      return {
         x: cx + r*Math.sin(Math.PI*-a/180),
         y: cy - r*Math.cos(Math.PI*-a/180)
      }
   }
};