2013-01-17 101 views
0

我想在我的网站上使用小型帮助框,由Jquery动画。一切都很好,但是当我快速进入和离开盒子时,它开始显示ang疯狂地隐藏。有什么办法如何停止功能隐藏盒? 这里是我的帮助框:http://jojo.i-web.sk/test/box.php如何停止jquery功能

这是代码:

<body> 
    <center>!!LOOK AT DOWN RIGHT CORNER!!</center> 
    <div id="help-box"> 
     <div id="help_sipka"> 
      << 
     </div> 
     <div id="help_problem_nadpis"> 
      <h1>Do you have problem?</h1> 
      Click here. 
     </div> 
     <div id="help_problem_button"> 
      <div style="float:right;"><acronym title="Zatvoriť"><input id="help_zavri" class="button_zavri" type="button" value="X"></acronym></div> 
      <h1>Do you have problem?</h1> 
      Have you lost password or found bug? Do you need help<br> 
      We can help you.<br> 
      Send mail to our admins.<br> 
      <input class="button_odosli" type="button" name="posli_mail" value="Send mail"> 
     </div> 
    </div> 
    <script type="text/javascript"> 
     $(function() { 
     var help_finished=1; 

      $('#help-box').mouseenter(function(){ 
       if(help_finished!=2) { 
        help_finished=1; 
        $('#help-box').animate({width:'200'}); 
        $('#help_sipka').delay(500).slideUp();   
        $('#help_problem_nadpis').delay(500).slideDown(); 
       } 
      }); 

      $('#help-box').mouseleave(function(){ 
       if (help_finished ==1) { 
        setTimeout(hide_box, 500); 
        help_finished=0; 
       } 
      }); 

      function hide_box() { 
       if (help_finished==0||help_finished==3) { 
        $('#help_sipka').slideDown();   
        $('#help_problem_nadpis').slideUp(); 
        $('#help-box').delay(300).animate({width:'30'}); 
       } 
      } 

      $('#help_zavri').click(function(){ 
       help_finished=3 
       $('#help_problem_button').slideUp(); 
       $('#help-box').animate({opacity:'0.75'}); 
       hide_box();   
      }); 

      $('#help-box').click(function(){ 
       if(help_finished!=3) { 
        help_finished=2; 
        $('#help-box').animate({opacity:'1'}); 
        $('#help_problem_button').slideDown(); 
        $('#help_problem_nadpis').slideUp(); 
       } 
      }); 
     }); 
    </script> 
</body> 
+0

'$( '#求助箱')停止(真,真).animate({W上。宽度:'200'});' – adeneo

回答

2

使用jQuery的stop方法:

// Will stop the current animation and then start a fadeout. 
$(this).stop(true, true).fadeOut(); 
在你的榜样

所以,你可能会想这样做:

$('#help-box').stop(true,true).animate({width:'200'}); 

此外,您还可以看看烧成通过使用完成的委托之后的下一个动画,因此您不需要硬编码延迟:

$('#help-box').stop(true,true).animate({width:'200'}, function() { 
     $('#help_sipka').slideUp(function() { 
      $('#help_problem_nadpis').slideDown(); 
     }); 
}); 

由于您使用超时,您将需要保持在一个变量周围,清除它,使用clearTimeout你设置一个新的超时功能之前:

// keep this variable scoped outside the method call. 
var timeout; 

//... Whenever you set the timeout, clear it before you set a new one. 
clearTimeout(timeout); 
timeout = setTimeout(hide_box, 500); 
+0

问题是,当我离开helpbox时,我打电话给setTimeout(hide_box,500)...然后我进入并离开,并且一次又一次地调用setTimeout(hide_box,500),即使第一个功能还没有结束......所以它不是我需要停止的动画,而是。我必须停止调用hide_box函数直到第一次结束。但我不知道如何。 – jojo3696

+0

@ jojo3696我添加了关于清理超时的信息。 –

+0

非常感谢...现在它工作完美:) – jojo3696

1

是的,这是.stop()

当你开始一个新的动画,你可以做到这一点。

$('selector').stop(true, true).animate({}); 

stop()这些参数清除jQuery的动画队列,并迫使当前动画停止,使该诉讼动画立即启动。

Documentation