2011-06-15 11 views

回答

1

使用one()函數可能會做你正在尋找的。將代碼調整爲以下內容:

$(document).ready(function(){ 
    // The "one()" function means that this action is disconnected 
    // from the element once the action occurs. In other words, click 
    // it twice, and the second one does nothing. 
    $("#slideshow-previous").one("click", showPreviousSlide); 
    $("#slideshow-next").one("click", showNextSlide); 
    ... 
}); 

但是僅僅這樣做還不夠。動畫完成後,我們必須再次掛接事件處理程序。使用的動畫()的回調函數:

function updateContentHolder() 
{ 
    ... 
    $("#slideshow-scroller").animate({scrollLeft: scrollAmount}, 1000, function() { 
     $("#slideshow-previous").one("click", showPreviousSlide); 
     $("#slideshow-next").one("click", showNextSlide); 
    }); 
} 

正如有人指出,在評論這有多次安裝showPreviousSlide和showNextSlide的問題沒有按下按鈕爲準。你可以通過做更多的工作來彌補這一點:

function showPreviousSlide() 
{ 
    currentSlide--; 
    updateContentHolder($(this).attr("id"), showPreviousSlide); 
    updateButtons(); 
} 

function showNextSlide() 
{ 
    currentSlide++; 
    updateContentHolder($(this).attr("id"), showNextSlide); 
    updateButtons(); 
} 

... 

function updateContentHolder(id, callback) 
{ 
    ... 
    $("#slideshow-scroller").animate({scrollLeft: scrollAmount}, 1000, function() { 
     $("#" + id).one("click", callback); 
    }); 
} 
+1

這會雙擊你沒有點擊的那個點擊嗎?既然你在兩個方法上都調用'one',但是隻有一個被點擊後再調用它們呢? – 2011-06-15 20:54:37

+0

輝煌 - 這正是我所需要的 - 本網站及其成員非常棒 - 非常感謝所有的幫助! – Dave 2011-06-15 21:20:37

+0

@kingjiv,很好。更新了答案。 – riwalk 2011-06-15 22:13:12

0

只要點擊某個箭頭(如isPending)就可以將標誌設置爲true。然後在點擊箭頭時檢查此項,如果屬實,請忽略該點擊。然後當動畫完成時將標誌設置回false。

+0

任何人都在意解釋爲什麼我會因此而失望?對我來說似乎很合乎邏輯。我很想知道它有什麼問題。 – 2011-06-15 20:55:17

+0

如果OP只使用純JS,那不是一個錯誤的答案。可能是-1,因爲使用jQuery的更好的東西已經存在。 – Sparky 2011-06-15 22:11:32

+0

我會趕上擺脫-1。僅僅因爲它不是最好的解決方案並不是一件壞事。 – riwalk 2011-06-15 22:16:32