javascript - Is there a shim for SVG transformOrigin in IE -


i'm trying make animation using svg ie doesn't playing transformorigin.

it works in chrome , firefox. try in ie see mean. oh, , don't want depend on flash. i'll canvas if required. or shumway.

relevant code

 var deg =360;  velocity.animate($('#inner').get(), {               rotatez: deg             }, 1000)  <g id="inner" style="transform-origin: 81.0254859924316px 59.6874922621516px 0px;" data-bind="spintriangle:true"    id="g3359">   <path      d="m 68.010487,-6.3659557 24.050001,0 48.720002,89.4223967 -12.24,22.411139 -97.00001,0 -12.26999,-22.442889 z"      id="inlight"      style="fill:#a8a9ad;fill-opacity:1"      inkscape:connector-curvature="0" />   <path      d="m 61.900487,27.282517 36.280001,0 18.150882,34.195786 -18.140882,33.492658 -36.320001,0.0106 l 43.56048,61.650506 z"      id="indark"      style="fill:#5b5b5b"      inkscape:connector-curvature="0" /> </g> 

    ko.utils.injectbinding = function(allbindings, key, value) {        //https://github.com/knockout/knockout/pull/932#issuecomment-26547528        allbindings.get = allbindings.get || getfallback;        var has = allbindings.has;        var = allbindings.get;        return {          has: function(bindingkey) {            return (bindingkey == key) || has.call(allbindings, bindingkey);          },          get: function(bindingkey) {            var binding = get.call(allbindings, bindingkey);            if (bindingkey == key) {              binding = value;            }            return binding;          }        };      };      var router = {        isnavigating: ko.observable(true)      };      var v = $.velocity,        q = q;      v.promise = q.promise;      var template = $('img').html();      var tan30 = 0.5773502691896258;      ko.bindinghandlers.spintriangle = {        init: function(element, valueaccessor, allbindings, viewmodel, bindingcontext) {          var deg = 0;          var first = true;          var spinfunc = function() {            if (ko.unwrap(router.isnavigating) || first) {              deg = deg ? 0 : 360;              first = false;              return v.animate(element, {                rotatez: deg              }, 1000).then(spinfunc);            }          };          ko.utils.extend(allbindings, ko.utils.injectbinding(allbindings, 'origin', {            spinfunc: spinfunc          }));        },        update: function(element, valueaccessor, allbindings, viewmodel, bindingcontext) {          var origin = allbindings.get('origin');          if (ko.unwrap(router.isnavigating)) {            origin.spinfunc();          }        }      };      ko.bindinghandlers.roundrobin = {        init: function(element, valueaccessor, allbindings, viewmodel, bindingcontext) {          var forward = 1;          var first = true;          var arr = _.map($(element).children().get(), function(chel) {            return chel;          });          arr.push(arr.shift());          arr = _.zip($(element).children().get(), arr);          arr = _.map(arr,            function(item) {              return [item[0].getbbox(), item[1].getbbox(), item[0]];            });          var spinfunc = function() {            if (ko.unwrap(router.isnavigating) || first)              forward = forward ? 0 : 1;            first = false;            return q.all(_.map(arr, function(item) {              var original = item[0],                target = item[1];              el = item[2]              if (forward) {                return v.animate(el, {                  translatex: 0,                  translatey: 0                }, 1000);              } else {                return v.animate(el, {                  translatex: target.x - original.x,                  translatey: target.y - original.y                }, 1000);              }            })).then(spinfunc);          };          ko.utils.extend(allbindings, ko.utils.injectbinding(allbindings, 'origin', {            spinfunc: spinfunc          }));        },        update: function(element, valueaccessor, allbindings, viewmodel, bindingcontext) {          var origin = allbindings.get('origin');          if (ko.unwrap(router.isnavigating)) {            origin.spinfunc();          }        }      };        ko.components.register('ultraspin', {        viewmodel: function(params) {          this.scale = 2;          if (params.viewmodel)            ko.utils.extend(this, params.viewmodel);          else            ko.utils.extend(this, params);        },        template: template      });      debugger;        ko.applybindings()
<script src="http://code.jquery.com/jquery-git.js"></script>  <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>  <script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.2/velocity.js"></script>  <script src="https://rawgit.com/kriskowal/q/v1/q.js"></script>  <script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.7.0/lodash.min.js"></script>  <img>  <svg width="164" height="155">    <g id="g3019" transform="translate(0,5),matrix(0.51365572,0,0,0.48391494,-0.10298261,3.0805811), scale({{scale}})">      <g id="outer" transform="matrix(1,0,0,1.0581278,0,-8.5844007)">        <path style="fill:#a8a9ad;fill-opacity:1" id="outlight" d="m 143.85049,9.0213601 15.99,27.3399999 -63.74,111.31 -32.11,0.01 l 0.20048956,36.37136 16.20049,9.0213601 z" inkscape:connector-curvature="0" />        <path id="outdark" transform="matrix(0.79999999,0,0,0.80001581,0.20048956,0.96136007)" d="m 30.84375,28.96875 21.9375,44.5 l 68.84375,120.125 18,0.0312 l 177.625,44.5 168.75,29 z" style="fill:#5b5b5b" inkscape:connector-curvature="0" />      </g>      <g id="inner" style="transform-origin: 81.0254859924316px 59.6874922621516px 0px;" data-bind="spintriangle:true" id="g3359">        <path d="m 68.010487,-6.3659557 24.050001,0 48.720002,89.4223967 -12.24,22.411139 -97.00001,0 -12.26999,-22.442889 z" id="inlight" style="fill:#a8a9ad;fill-opacity:1" inkscape:connector-curvature="0" />        <path d="m 61.900487,27.282517 36.280001,0 18.150882,34.195786 -18.140882,33.492658 -36.320001,0.0106 l 43.56048,61.650506 z" id="indark" style="fill:#5b5b5b" inkscape:connector-curvature="0" />      </g>      <g data-bind="roundrobin:true" id="bolts">        <path d="m 68.92049,47.50136 5.68,-9.72 11.12,0.14 5.42,9.56 -5.47,9.68 -11.26,0.01 z" id="bolt1" style="fill:#a8a9ad" inkscape:connector-curvature="0" />        <path d="m 54.04049,71.55136 5.63,-9.65 11.13,0.03 5.43,9.63 -5.34,9.6 -11.51,-0.05 z" id="bolt2" style="fill:#a8a9ad" inkscape:connector-curvature="0" />        <path d="m 89.26049,61.93136 11.19,-0.01 5.56,9.6 -5.4,9.5 -11.42,0.16 -5.38,-9.54 z" id="bolt3" style="fill:#a8a9ad" inkscape:connector-curvature="0" />      </g>    </g>  </svg>  </img>    <ultraspin></ultraspin>

aparently gsap, can velocityjs solved problem.