2011-12-28 8 views
0

私は、時間の経過と共にオブジェクトをより速く、より速く回転させようとしています。アニメーションが繰り返されるたびにイベントを発生させることに問題があります。 SVG/SMILの​​が必要なようですが、次のコードでは、onSpinEnd()はまったく呼び出されていないようです。私は間違って何をしていますか?結局のところend-of-repeat-loopでのSVG animateTransformの変更

<path id='coloredPart' d='…'> 
     <animateTransform 
      id='spin' 
      attributeName='transform' 
      begin='0s' 
      dur='5s' 
      type='rotate' 
      from='0 0 0' 
      to='-360 0 0' 
      repeatCount='indefinite' 
     /> 
    </path> 

    <script> <![CDATA[ 
     var spin = document.getElementById('spin'); 
     var onSpinEnd = function() { 
      var intPart = 0; 
      intPart = parseInt(spin.getAttribute('dur')[0].slice(0, -1)); 
      console.log(intPart); 
      if (intPart > 1) --intPart; 
      spin.setAttribute('dur', intPart.toString() + 's'); 
     }; 
     spin.addEventListener('repeatEvent', onSpinEnd, false) 
     ]]> 
    </script> 

[0].slice(0, -1))は "16S" から私 "16" を与えることはありません。 .slice(0, -1))となります。その行は次のように表示されます。

intPart = parseInt(spin.getAttribute('dur').slice(0, -1)); 
+0

明らかにrepeatEventは発砲していませんが、なぜその理由がわかりません。とにかく、あなたの 'slice'が間違っていることを指摘しなければなりません、負のインデックスを使うことはできません。 – bennedich

+0

実際には、[あなたは負のインデックス付けを使うことができます](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/slice)。 – adiabatic

答えて

0

スライスが何であるかわかりません。これはFirefox上で動作するようです。

var onSpinEnd = function() { 
    var spin = document.getElementById('spin'); 
    var intPart = 0; 
    intPart = parseInt(spin.getAttribute('dur')[0]); 
    console.log(intPart); 
    if (intPart > 1) --intPart; 
    spin.setAttribute('dur', intPart.toString() + 's'); 
}; 

また、私が知る限り、OperaとFirefoxのみが現在SMILイベントを起動しています。

+0

FirefoxとOperaだけですか?ありがとう! – adiabatic

関連する問題