2013-08-25 27 views
0

我有一个通过点击按钮向上补间的画布。 我试图在补间结束后让它回落,但它只是没有用。 它开始在屏幕的顶部罚款。第一次点击按钮时,它会下降到400,然后滑动到200.但在下一次点击 - 它会继续飞起来,而不是先回到400。 请帮忙! :)在javaScript中重置y元素的位置

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
    <script src= 
    "http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/TweenMax.min.js"></script> 
</head> 

<body> 
    <button onclick="func();">click</button> <canvas height="100" id="canvas" 
    style="position:absolute; top:50px; border:3px solid #000000;" width= 
    "200"></canvas> 
    <script> 
      var c = document.getElementById("canvas"); 
      function func(){    
       c.style.top = 400 + "px"; 
       TweenMax.to(c,2,{y: "-=200", onComplete:foo}); 
      } 
      function foo(){ 
       c.style.top = "400px"; 
      } 
    </script> 
</body> 
</html> 

回答

0

c.style.top什么都没有做与TweenMax y修改一次补间发生了。在第一次调用TweenMax.to时,TweenMax会在该对象上创建一个变换矩阵(自定义样式),并从此时开始不再关注常规的CSS属性。

您必须在您的.to调用中定义startAt: {y: '400px'}才能强制TweenMax将补间重置为静态值。

0

问题是,此补间插件实际上更改了transform CSS属性以进行转换。因此,对元素'style.top进行任何更改都不会影响其位置,因为TweenMax的特定浏览器transform将取代它。

您可以使用它们的startAt属性始终在所需的位置开始。虽然我不推荐这个插件,但我个人更喜欢jQuery

演示:http://jsfiddle.net/TyZhB/2/

+1

我不会把它称为 “愚蠢的”。它对速度进行了大量优化,在这个过程中不可避免地会削减一些角落。尽管现在代价质量代价下的JS速度优化变得越来越多。 –

+0

是的,也许我是苛刻的,但看到问题是脚本更改'-webkit-transform'属性只是为了移动一个高200px的框似乎是错误的......这就像你要么只使用**这个没有'CSS'的TweenMax,或者根本不使用它 – Cristy