使用IE 8/9转换矩阵问题

时间:2013-12-31 15:33:14

标签: css internet-explorer matrix svg css-transforms

我正在尝试在我的网页上获取SVG对象的变换矩阵。这是我用来确保它被四个CSS转换属性中的一个拾取的当前语句:

$("#printdiv svg").each(function(){

    var webkitMatrix = false;

    var transform = $(this).css("transform");

    if (transform == null || transform.indexOf("matrix") == -1)
       transform = $(this).css("-ms-transform");

    if (transform == null || transform.indexOf("matrix") == -1)
        transform = $(this).css("-moz-transform");

    if (transform == null || transform.indexOf("matrix") == -1){
        transform = $(this).css("-webkit-transform");
        webkitMatrix = true;
    }

    /* do stuff with matrix */

});

(我有一个var“webkitMatrix”的原因是因为如果为true,函数必须以不同的方式解析-webkit-transform矩阵)

我的问题是(就像我做的大多数事情一样)IE10,Chrome和FireFox选择矩阵就好了,但IE 8/9没有。

在IE9模式/标准和FireFox(最新版本)中使用IE10时,您可以看到将每个CSS属性打印到控制台的结果: Transform comparison IE9 and FF (这里更大的版本:http://i.stack.imgur.com/g07q4.png

是否有我可以使用的东西,可能是filter:或不同的转换属性,以便我可以获取我的SVG信息?

1 个答案:

答案 0 :(得分:0)

<强> IE9

您可以像这样解析SVG矩阵:

svgElement = document.getElementById("mySVG_ID");
var matrixIE = new Array();
matrixIE[0] = svgElement.createSVGMatrix().a;
matrixIE[1] = svgElement.createSVGMatrix().c; //C and B are switched
matrixIE[2] = svgElement.createSVGMatrix().b;
matrixIE[3] = svgElement.createSVGMatrix().d;
matrixIE[4] = $("#mySVG_ID").css("left");
matrixIE[5] = $("#mySVG_ID").css("top");

<强> IE8

Leaflet对不兼容的浏览器使用VML对象而不是SVG对象。 VML元素的类名为.leaflet-vml-shape。因为我依靠html2canvas将我的网页渲染为图片,并且html2canvas在IE8下不起作用,所以我没有理由研究如何解析VML矩阵。