2013-07-18 72 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。就像注意到的那樣,這個盒子不會再用我的解決方案打開,但是因爲你沒有指定你想讓它再次打開。