要素のバウンディング ボックスを変換ありとなしで取得する方法があります。
変換あり:
var bbox = image.getBBox(),
width = bbox.width,
height = bbox.height;
変換なし:
var bbox = image.getBBoxWOTransform(),
width = bbox.width,
height = bbox.height;
幅と高さを直接提供するヘルパー メソッドを使用して Raphael.el を拡張できます (注意が必要です)。バウンディング ボックス メソッドを使用して、関心のある部分を返すこともできますが、もう少し効率的にするために、要素のマトリックス プロパティと属性からの位置/幅/高さを使用して、要求されたプロパティのみを計算しました。
(function (r) {
function getX() {
var posX = this.attr("x") || 0,
posY = this.attr("y") || 0;
return this.matrix.x(posX, posY);
}
function getY() {
var posX = this.attr("x") || 0,
posY = this.attr("y") || 0;
return this.matrix.y(posX, posY);
}
function getWidth() {
var posX = this.attr("x") || 0,
posY = this.attr("y") || 0,
maxX = posX + (this.attr("width") || 0),
maxY = posY + (this.attr("height") || 0),
m = this.matrix,
x = [
m.x(posX, posY),
m.x(maxX, posY),
m.x(maxX, maxY),
m.x(posX, maxY)
];
return Math.max.apply(Math, x) - Math.min.apply(Math, x);
}
function getHeight() {
var posX = this.attr("x") || 0,
posY = this.attr("y") || 0,
maxX = posX + (this.attr("width") || 0),
maxY = posY + (this.attr("height") || 0),
m = this.matrix,
y = [
m.y(posX, posY),
m.y(maxX, posY),
m.y(maxX, maxY),
m.y(posX, maxY)
];
return Math.max.apply(Math, y) - Math.min.apply(Math, y);
}
r.getX = getX;
r.getY = getY;
r.getWidth = getWidth;
r.getHeight = getHeight;
}(Raphael.el))
使用法:
var x = image.getX();
var y = image.getY();
var width = image.getWidth();
var height = image.getHeight();
Raphael を含めた後、スクリプトを含めるだけです。画像に適した、幅、高さ、x および y 属性を持つ要素に対してのみ機能することに注意してください。Raphael は実際に、パス データからバウンディング ボックスを計算します。これにより、パス内のすべてのポイントが変換され、変換後に x/y の最小値/最大値が取得されます。