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

时间:2014-07-16 17:29:18

标签: javascript svg phantomjs

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

我把一个展示这个的例子放在一起:

Look at the following result in your browser,然后使用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}

和Phantom一起:

{"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的interface被定义为返回所有浮点值。它们很可能是花车,但它们至少是圆形,在使用较大的单位(例如英寸)时,它们并没有多大用处。

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

1 个答案:

答案 0 :(得分:2)

直到最近一两年,大多数浏览器在整个像素分辨率下的定位概念都很少。由于它是如此新颖,因此很难在多个浏览器中获得这些值的完全一致性。

您使用的PhantomJS版本可能不支持子像素定位。我不确定是不是因为你有旧版本,或者它根本不受支持。