2012-08-08 34 views

回答

0

你可以添加一个处理stage.onFrame其输出项目的坐标。当用户点击该按钮启动动画,并停止stage执行针对transitionTo方法回调时,只需启动stage

window.onload = function() { 
    var stage = new Kinetic.Stage({ 
     container: "container", 
     width: 500, 
     height: 200 
    }); 
    var layer = new Kinetic.Layer(); 
    var greenBox = new Kinetic.Rect({ 
     x: 100, 
     y: stage.getHeight()/2, 
     width: 100, 
     height: 50, 
     fill: 'green', 
     stroke: 'black', 
     strokeWidth: 4 
    }); 


    layer.add(greenBox); 
    stage.add(layer); 

    stage.onFrame(function(frame) { 
     // Update print coordinates on each frame of animation loop 
     jQuery("#coordinates").text(Math.round(greenBox.getX()) + "," + Math.round(greenBox.getY()));  
    }); 

    jQuery("#StartAnim").click(function() { 

     // Start the timer running 
     stage.start(); 

     greenBox.transitionTo({ 
      x: 300, 
      duration: 1, 
      easing: 'ease-in-out', 
      callback: function() { 
       // Stop the stage loop 
       stage.stop(); 
      } 
     }); 

    }); 
}; 

更新小提琴here

+0

这是一个好主意。它对于给定的问题非常有效。但我担心效率。我也发现了编写自己的动画功能的可能性(http://www.html5canvastutorials.com/kineticjs/html5-canvas-kineticjs-animate-position-tutorial/)。这会更有效率还是**利润只有微小的**?如果后者是这种情况,我很乐意使用您的解决方案,因为我可以使用KineticJS的良好实施的动画功能。 – AKingston 2012-08-09 08:42:14

+0

我认为在这个阶段的性能差异会很小,但是我原来的解决方案确实需要在一个我认为Kinetic正在使用的方法的基础上增加一个动画循环,以便使用transitionTo方法移动框,并且您可以通过舞台的onFrame方法。你会更好地关注该循环,进一步的积极结果是所得到的代码更清洁。看到我更新的答案。 – 2012-08-09 09:34:11

+0

太棒了!我没有看到这种可能性,但它的确很棒。我将在动画实施过程中实现更多的功能。因此代码必须高效。非常感谢您的帮助和您真棒解决方案! – AKingston 2012-08-09 10:36:50