2012-10-29 19 views
12

ほとんどのブラウザでは、次のように動作します。FireFoxでSVG要素の寸法を取得するには?

window.onload = function(){ 
    console.log(document.getElementById('svgElm').getBoundingClientRect().width); 
}; 

ここにはdemoがあります。 Google Chromeで試してみると、コンソールに200が出力されます。ただし、FireFoxは0を返します。

答えて

18

SVGプロパティを返すことができない場合は、親ディメンションに戻ってしまいました。ここにデモhttp://jsbin.com/uzoyik/1/editがあります。

のrelaventのコードは次のとおりです。

svg.clientWidth || svg.parentNode.clientWidth 
svg.clientHeight || svg.parentNode.clientHeight 
1

このFirefoxのバグは詳細を参照してくださいbug 530985 10月14日、2014年に

をリリースされたFirefoxの33で修正されました。

+0

は、既知のバグこのですか? – Gajus

8

私は「幅」とは思わないが、getBoundingClientRectメソッドによって返されるオブジェクトの標準クロスブラウザのプロパティです。

var box = el.getBoundingClientRect(); 
var width = box.right-box.left; 
var height = box.bottom-box.top; 
+0

それは私にとって素晴らしい仕事でした。ありがとうございました。 –

1

これは.getComputedStyle()を使用していたために私が見つけた解決策:私は、通常のように何かをします。 svgの要素は古いIE8-ブラウザではサポートされていないため、.getComputedStyle()は一貫した結果を得る方法です。

だから、私は図書館で本機能を使用して終了:

var heightComponents = ['height', 'paddingTop', 'paddingBottom', 'borderTopWidth', 'borderBottomWidth'], 
    widthComponents = ['width', 'paddingLeft', 'paddingRight', 'borderLeftWidth', 'borderRightWidth']; 

var svgCalculateSize = function (el) { 

    var gCS = window.getComputedStyle(el), // using gCS because IE8- has no support for svg anyway 
     bounds = { 
      width: 0, 
      height: 0 
     }; 

    heightComponents.forEach(function (css) { 
     bounds.height += parseFloat(gCS[css]); 
    }); 
    widthComponents.forEach(function (css) { 
     bounds.width += parseFloat(gCS[css]); 
    }); 
    return bounds; 
}; 
関連する問題