2013-07-18 47 views
1

我是新来的Jquery,我试图让搜索字段在动画中,然后当你点击关闭图标(#search-close)它动画出来, #search-close按钮消失。animate wont .stop() - 令人讨厌的简单Jquery问题

动画中工作正常,但是当我点击关闭按钮,它的动画了,但马上又动画在

我知道这是非常简单的

在此先感谢

<script type="text/javascript">  

$j(document).ready(function() { 

$j('#search-slide').mousedown(function() { 
$j('#search-close').fadeIn(100); 
$j('#search-slide').animate({'left':-1}); 
$j('#tbcopy a').fadeOut(100);}); 

$j('#search-close').mousedown(function() { 
$j('#search-close').stop().hide(); 
$j('#search-slide').stop().animate({'left':-250}); 
});}); 


</script> 
+0

我希望你明白['mousedown()'](http://api.jquery.com/mousedown/)也会在你点击-n拖动时捕获。如果你不想要这种行为,你必须使用['click()'](http://api.jquery.com/click/)。 – Braiam

回答

1

我相信,你得到这个错误的原因是由于关闭按钮的位置,因为它位于顶部div内,所以你实际上会触发两个点击事件。您的stop()不起作用的原因可能是因为它们具有不同的动画队列,因为它们是不同的元素。尝试添加一个布尔值到动画完成之前检查的外部div。

2

添加.stop(true,true)这将clearqueu设置为true并跳转到动画结束。

+0

嗨Patsy Issa - 它还没有解决问题 – user2595800

+0

@ user2595800你可以设置它在一个小提琴吗? –

+0

嗨Patsy Issa - 我在这里设置了一个:http://jsfiddle.net/maxl23/wTTqq/1/ – user2595800

0

我建议您使用.finish()方法,因为它与.stop(true,true)类似,但.finish()实际上会完成动画并且不会在中间停止它。

+0

no does not work - 我在这里设置了一个小提琴:http://jsfiddle.net/maxl23/ wTTqq/1/ – user2595800

+0

这是您使用代码的方式的预期行为。您正在触发mousedown的两个函数,并且您从不检查该框是否“打开”。你可以使用一个标志来跟踪盒子是否打开,然后执行你想要的功能。与布雷亚姆建议的想法相同。为什么你使用mousdown而不是简单的点击事件?我编辑了小提琴http://jsfiddle.net/maxl23/wTTqq/1/ – knikolov

0

您可以添加一个类,防止点击后再次触发该框。

$(document).ready(function() { 
    $('#search-slide').click(function() { 
     if ($(this).hasClass('visible')) { 
      console.log('triggered'); 
      return; 
     } else { 
      $('#search-close').fadeIn(100); 
      $(this).animate({ 
       'left': -1 
      }).addClass('visible'); 
      $('#tbcopy a').fadeOut(100); 
     } 
    }); 
    $('#search-close').click(function() { 
     $(this).stop().hide(); 
     $('#search-slide').stop().animate({ 
      'left': -250 
     }); 
    }); 
}); 

A正在工作jsfiddle。就像注意到的那样,这个盒子不会再用我的解决方案打开,但是因为你没有指定你想让它再次打开。