2010-11-13 65 views
1

另一個初學者 - 我自己的問題:可以在正在執行的時候停用.click(函數)嗎?

是否有可能禁用.click(function)而它正在進行[滑動向上/向下和做一些id開關]?

我有一堆錨使用相同的功能,我不希望用戶點擊另一個鏈接,而仍然有一些slidingUp/Down正在進行。爲了獲得這種效果,我必須在正在進行時阻止該功能。

任何想法的人?

回答

0

您可以在點擊處理程序中設置布爾標誌,並在動畫結束時取消設置它。

然後,在處理程序的頂部,如果標誌被設置,您可以return false;

3

你可以這樣說:

$('some_selector').click(function() { 
    var running = false; 

    return function() { 
     if (running === false) { 
      running = true; 
      // do animation stuff; 
      // put this in your callback: 
      running = false; 
     } 

     return false; 
    }; 
}()); 

這將禁用動畫,而running等於true

+0

喜歡它需要在這裏running'的'範圍將不會在所有的內容相一致......也有更簡單的方法來做到這一點:) – 2010-11-14 00:03:12

+0

@Nick:如何範圍變化?你能詳細解釋一下嗎? – jwueller 2010-11-14 00:06:01

+0

@Nick - 它似乎與靜態數量的元素一起工作,但如果處理程序需要再次綁定到新元素,則不會。這是你的意思嗎? http://jsfiddle.net/jYREj/ – user113716 2010-11-14 00:06:45

4

你可以檢查是否有您關心使用:animated選擇,目前正在動畫,這樣的元素:

$("a.myClass").click(function() { 
    if($("a.myClass:animated").length) return false; 
    //animate/do stuff 
}); 

當正在動畫任何a.myClass元素,點擊次數不會有任何效果。

+0

Bah!你打敗了我!哈哈=) – John 2010-11-14 00:03:14

+0

@elusive - 你不能,重新讀這個問題...*其他*元素可能是動畫的,不一定是你所在的元素。我不認爲它實際上甚至是相同的選擇器,可能是動畫的兒童/相關元素。 – 2010-11-14 00:14:30

0

看看:animated選擇器。正如文檔所述,它將返回當前正在進行的所有元素。如果您有特定元素正在檢查,您可以使用它的ID或類以及此選擇器來檢查它是否正在運行動畫。

$("#myButton").click(function(){ 
    if ($("#myDiv:animated").length === 0) { 
    // do awesome animation here 
    } else { 
    // brown explosions! Dumbledore dies, so does Hedwig! 
    return false; 
    } 
}); 
+0

小於零?這將如何發生?我認爲你的意思是'=== 0'。 – jwueller 2010-11-14 00:30:31

+0

Woops。我的意思是<=',但是'==='也可以。無論如何,沒關係。我認爲Nick Craver已經把這一個放在了包裏。聖誕節快樂! – John 2010-11-14 02:08:47

相關問題