2012-01-22 189 views
2

我試圖使用SVG動畫,即我試圖旋轉它在圓形路徑上不上,我已經取得的橢圓的代碼elliptrical路徑上旋轉一圈,任何人都可以在圓上的SVG動畫幫助我在這個PLZ ??橢圓路徑

<!DOCTYPE html> 
<html> 
    <head> 
     <title>JavaScript SVG Animation</title> 
     <style> 
     /* CSS here. */ 
     </style> 
     <script> 
      /* CONSTANTS */ 
      var initialTheta = 0; // The initial rotation angle, in degrees. 
      var thetaDelta = 0.3; // The amount to rotate the square every "delay" milliseconds, in degrees. 
      var delay = 10; // The delay between animation stills, in milliseconds. Affects animation smoothness. 
      var angularLimit = 360; // The maximum number of degrees to rotate the square. 
      var cx = 200; // circle center 
      var cy = 150; //circle center 

      /* GLOBALS */ 
      var theCircle; // Will contain a reference to the square element, as well as other things. 
      var timer; // Contains the setInterval() object, used to stop the animation. 
      var pauseEvent = false; 

      function init() 
      { 
       theCircle = document.getElementById("s1"); // Set this custom property after the page loads. 
       theCircle.currentTheta = initialTheta; // The initial rotation angle to use when the animation starts, stored in 
       timer = setInterval(doAnim, delay); // Call the doAnim() function every "delay" milliseconds until "timer" is cleared.  
      } 

      function doAnim() 
      { 
       if (theCircle.currentTheta > angularLimit) 
       { 
        clearInterval(timer); // The square has rotated enough, instruct the browser to stop calling the doAnim() function. 
        return; // No point in continuing; stop now. 
       } 
       theCircle.setAttribute("transform", "rotate(" + theCircle.currentTheta + "," + cx + "," + cy +")"); // Rotate the square by a small amount. around given circle point 
       theCircle.currentTheta += thetaDelta; // Increase the angle that the square will be rotated to, by a small amount. 
      } 

      window.onload = function(){ 
       var elplay = document.getElementById("play"); 
       elplay.addEventListener("click", function(){  
        if(!pauseEvent){ 
         init(); 
         doAnim(); 
        } else{ 
         init(); 
         doAnim(); 
         pauseEvent = false; 
        } 
       }, false); 

       var elstop = document.getElementById("stop"); 
       elstop.addEventListener("click", function(){ 
        theCircle.currentTheta = 0 //initialTheta; // The initial rotation angle to use when the animation starts, stored in 
        theCircle.setAttribute("transform", "rotate(" + theCircle.currentTheta + "," + cx + "," + cy +")"); // Rotate the square by a small amount. around given circle point 
        clearInterval(timer); // The square has rotated enough, instruct the browser to stop calling the doAnim() function. 
        return; // No point in continuing; stop now. 
       }, false); 

       var elpause = document.getElementById("pause"); 
       elpause.addEventListener("click", function(){ 
        initialTheta = theCircle.currentTheta; 
        pauseEvent = true; 
        clearInterval(timer); // The square has rotated enough, instruct the browser to stop calling the doAnim() function. 
        return; // No point in continuing; stop now. 
       }, false); 
      } 
     </script> 
    </head> 
    <body> 
     <button id = "play" style="position: absolute;">Play</button> 
     <button id = "pause" style="position: absolute;left: 65px;">Pause</button> 
     <button id = "stop" style="position: absolute;left: 135px;">Stop</button> 
    <svg width="800px" height="800px" viewBox="0 0 800 800"> 
      <g transform="translate(200, 150)"> 
     <ellipse id = "s2" cx = "200" cy = "150" rx = "200" ry = "150" fill = "salmon" stroke = "black" stroke-width = "3"/> 
     <circle id = "s1" cx = "250" cy = "10" r = "20" fill = "yellow" stroke = "black" stroke-width = "3"/> 

     </g> 
    </svg> 
</html> 
+1

它是不能接受的,只需使用內置的SMIL [沿路徑動畫(http://www.w3.org/TR/SVG/animate.html#AnimateMotionElement)? – Phrogz

回答

1

我相信它不是按照你的路徑的原因是因爲你的數學是有點過。您正在繪製一個橢圓,但你轉動數學是圓形的。無論是糾正你的數學或者更好的是跟隨Phrogz諮詢和學習SMIL。

下面是一些SVG,讓你開始:

<path id="orbit" d="M200 400 A200,200 0 1,1 600,400 A200,200 0 1,1 200,400" fill = "salmon" stroke = "black" stroke-width = "3" /> 

    <circle r = "20" fill = "yellow" stroke = "black" stroke-width = "3"> 
     <animateMotion begin="0s" dur="12s" repeatCount="indefinite" > 
      <mpath xlink:href="#orbit"/> 
     </animateMotion> 
    </circle> 

請注意,您必須使用路徑對象和橢圓必須從至少兩個圓弧構成。