2014-04-03 35 views
1

我创建了一个代码,当一个加速度(像引力一样工作)时抛出一个元素,并在changed_lenght达到零时下降;防止第二次启动的功能,如果第一次没有完成

“mouseenter”正在触发此功能。当鼠标离开并快速进入时,该功能会一遍又一遍地重新开始,而不会停止前面的那个,所以看起来很糟糕。

我不知道是否有任何方法来检查是否在开始函数之前先前已经结束。或者其他可以帮助我的解决方案?

这里是我的JS代码

$('#outher').mouseenter(function moveone(){ 

    var t = 0; 
    var v = 20; 
    var p = 275; 
    var a = 5; 
    var moveoneint = setInterval(jump, 50); 
    function jump(){ 
      t++; 
      x = (v*t) - (0.5 * a * t * t); 
      p = (p - x); 
      if(x <= 0){ 
       clearInterval(moveoneint); 
       t = 0; 
       var movetwo = setInterval(fall, 50); 
       function fall(){ 
        t++; 
        x = (0.5 * a * t * t); 
        p = (p + x); 
        document.getElementById('inner').style.top = p + 'px'; 
        if(p >= 275){ 
         clearInterval(movetwo); 
        } 
       } 


      } 
      else{    
       document.getElementById('inner').style.top = p + 'px';  
     } 
    } 
}); 

,这里是一个小提琴

http://jsfiddle.net/ctarimli/TJte8/

+0

你应该考虑使用jQuery'动画()'方法,加上'停止()'方法和缓解作用(本身不支持,但是很多插件hanlde它) –

+0

如何用“动画”方法实现这种重力效应?因为我知道动画使用相同的速度,但我希望它变得越来越慢,并得到更快的下降 – ctarimli

+0

寻找缓解效应,这基本上是你在寻找 –

回答

3

您可以简单地删除mouseenter处理程序,直到动画完成。

JSFIDDLE

基本上,

var $outher = $('#outher'); 

var onMouseEnter = function() { 
    $outher.off('mouseenter', onMouseEnter); 

    // do all your animation logic, and once complete... 
    $outher.on('mouseenter', onMouseEnter); 
}; 

$outher.on('mouseenter', onMouseEnter); 
+0

我认为这就是我正在寻找的东西,实际上我的代码比我在这里写的要长。我会在我的代码中尝试。我会写出结果 – ctarimli

0

使用jQuery is检查,如果DIV是动画

if(!$('.inner').is(':animated')) 
{ 
    //Your code 
} 
1

如果您对第三方库代码开放,那么throttle /debounce将执行您想要的操作。请注意,该页面提到jQuery,但该库实际上并不需要jQuery。

特别是,查看$ .throttle方法的示例。

+0

@ jmar777的建议帮助我现在,但我会看看你的也是。 – ctarimli

相关问题