2010-09-27 19 views
0

我正在使用以下代码来使用户能够使用向上和向下箭头键显示或隐藏照片说明(#photoinfo)和菜单(.slidetable)。如果这两个div中的其中一个已经打开,那么在打开另一个之前按下相反的箭头将关闭该div。在动画过程中禁用keydown

$(document).unbind('keypress'); 
$(document).keydown(function(event) { 
    switch (event.keyCode) { 
    case 38: 
     if ($('#photoinfo').is(".open")) { 
      closeInfo(); 
     } 
     else if ($('.slidetable').is(".open")) { 
      closeSlide2(); 
      openInfo(); 
     } 
     else { 
      openInfo(); 
     } 
     break; 
    case 40: 
     if ($('.slidetable').is(".open")) { 
      closeSlide(); 
     } 
     else if ($('#photoinfo').is(".open")) { 
      closeInfo(); 
      openSlide(); 
     } 
     else { 
      openSlide(); 
     } 
     break; 
    } 
    return false; 
});​ 

看来工作,只是问题是,如果在同一时间按下两个箭头,或一前一后,双方的div打开,重叠在一起。我正在寻找一种方法,在第一次动画启动后基本上取消绑定keydown函数,并在完成后重新绑定keydown函数。我是一个jQuery新手,所以也许这不是做这件事的最好方法。在动画期间防止其他功能发射的最简单方法是什么?

感谢

回答

1

您可以设置一个boolean(isAnimating),以真正的你火的动画之前,一旦完成其设置为false。在KEYDOWN顶部只是说

if(isAnimating) 
{ 
    event.preventDefault(); 
    return false; 
} 

我不记得的语法有在动画的最后一个函数调用,但它是jQuery的文档中

+0

$(this).animate({options},duration,callback); – 2010-09-27 18:39:34

+0

很伤心,我不记得那 – methodin 2010-09-27 18:41:16

0

对不起,我有点糊涂了。你的答案的实施看起来像这样,还是我离开?

$(document).unbind('keypress'); 
$(document).keydown(function(event) { 
      if(isAnimating) 
      { 
       event.preventDefault(); 
       return false; 
      } 

      switch (event.keyCode) { 

       case 38: var isAnimating = true; 

         if ($('#photoinfo').is(".open")) { 
          closeInfo(); 

         } 

         else if ($('.slidetable').is(".open")) { 
          closeSlide2(); 
          openInfo(); 

         } 

         else { 
          openInfo(); 


         } break; 


       case 40: var isAnimating = true; 
         if ($('.slidetable').is(".open")) { 
           closeSlide(); 

         } 

         else if ($('#photoinfo').is(".open")) { 
          closeInfo(); 
          openSlide(); 

         } 

         else { 
          openSlide(); 

         } break;  

      } 
      var isAnimating = false;         
      return false; 
}); 
+0

一般而言,动画应该是全球性的。当动画完成时,您必须在动画函数openSlide/closeSlide中将其重置为false。这个想法是在动画制作的时候,没有其他的可以制作动画,并且一旦当前动画完成,它允许其他动画开始。有点像锁。 – methodin 2010-09-28 02:21:09

+0

我正在尝试一切,没有得到任何地方。如果(isAnimating) {event.preventDefault(); 返回false; } 在$(document).ready函数中,以使其成为全局的?当我自己做这一步时,页面已经锁定,不会让任何点击或按键功能工作。我该怎么做? – Thom 2010-10-01 18:26:06