Javascript 为什么PhantomJS在使用getBBox()方法时返回整数?

Javascript 为什么PhantomJS在使用getBBox()方法时返回整数?,javascript,svg,phantomjs,Javascript,Svg,Phantomjs,我使用的是PhantomJS 1.9.7和D3.js树示例的修改版本,但需要对涉及使用其边界框的标签进行一些不同的计算。当我在textDOM元素上调用getBBox()时,我收到的值都是整数,而不是浮点数 我举了一个例子来说明这一点: ,然后使用PhantomJS运行此命令,并观察控制台输出: var page = require('webpage').create(); page.onConsoleMessage = function(msg, lineNum, sourceId) {

我使用的是PhantomJS 1.9.7和D3.js树示例的修改版本,但需要对涉及使用其边界框的标签进行一些不同的计算。当我在
text
DOM元素上调用
getBBox()
时,我收到的值都是整数,而不是浮点数

我举了一个例子来说明这一点:

,然后使用PhantomJS运行此命令,并观察控制台输出:

var page = require('webpage').create();

page.onConsoleMessage = function(msg, lineNum, sourceId) {
    console.log(msg);
};

page.onAlert = function() {
    phantom.exit();
};

page.open('http://jsfiddle.net/99mAZ/4/');
对我来说,Chrome的输出(被截断)是这样的:

{"x":10,"y":-6.40625,"width":60,"height":13.015625}
{"x":-49,"y":-6.40625,"width":39,"height":13.015625}
{"x":-41,"y":-6.40625,"width":31,"height":13.015625}
{"x":-39,"y":-6.40625,"width":29,"height":13.015625}
{"x":-29,"y":-6.40625,"width":19,"height":13.015625}
而幻影:

{"x":10,"y":-7,"width":60,"height":13}
{"x":-49,"y":-7,"width":39,"height":13}
{"x":-41,"y":-7,"width":31,"height":13}
{"x":-39,"y":-7,"width":29,"height":13}
getBBox()
返回一个SVGRect。SVGRect的定义为返回所有浮点值。它们很可能是浮点数,但它们至少是最不圆的,这在使用更大的单位(如英寸)时没有多大用处


有没有办法获得更高的精度?

直到最近一两年,大多数浏览器都没有在全像素分辨率下定位的概念。因为它太新了,所以很难在多个浏览器中获得这些值的完全一致性


您正在使用的PhantomJS版本可能不支持亚像素定位。我不确定这是因为您的版本较旧,还是因为它根本不受支持。

您在其他浏览器中测试过吗?这可能只是因为Chrome具有亚像素渲染,而Phantom只计算整个像素级别的定位。不确定IE10/11或Firefox支持什么。@我认为loganfsmyth Safari的输出与Chrome相同,但我想我没有进行足够准确的快速扫描。这三个报告的数字略有不同。其中。Firefox和IE已经为getBBox返回了浮点值,只要它们支持SVG。我使用的是最新版本,所以可能它们还没有更新webkit后端。在将此标记为答案之前,我将暂缓,但这是一个充分的答案,可以解释为什么数字会向上舍入。这对html是正确的,但对SVG不是正确的。对于SVG,任何合理的实现都必须真正支持浮动以允许缩放。@RobertLongson我不确定这些接口定义是如何工作的,但宣布它们为浮动。我追溯到了一些getBBox()方法,但现在没有时间完全追溯到它,看看它是如何填充结构的。PhantomJS上当前的Webkit版本是534.34,于2011年发布()子像素渲染修复于2012年完成()。有关更多信息,请参见此: