我目前正在研究jQuery(無插件)中的翻頁效果。到目前爲止,只要您逐個點擊頁面,翻頁效果就可以正常工作。但現在我想包括一個下拉選擇(即選擇元素),以便用戶可以直接跳轉到所選內容。我嘗試使用循環和.each()方法進行此項工作,以便重複調用turnRightPage/turnLeftPage函數,直到顯示具有所選內容的頁面。但經過相當多的試驗和錯誤以及大量研究之後,我認爲對於我的turnRightPage/turnLeftPage()函數(它們是轉換各個頁面的轉換函數),循環迭代速度太快,因爲循環完成,在功能完成之前。我想,我需要做的是找到一種方法來暫停循環,直到函數完成執行,然後繼續下一次迭代。我認爲最有前途的方法會使用的功能與迭代計數器,就像是這裏建議: Javascript: wait for function in loop to finish executing before next iteration(感謝在這一點上jfriend00)我也看過 Invoking a jQuery function after .each() has completed和 wait for each jQuery 等等,其中類似的解決方案被提出。爲什麼函數只運行一次?使用計數器函數試圖運行函數多次,之前調用完成後,使用計數器函數
下面是我試圖實現jfriend00的回調。我添加了一個return語句,以在頁面翻頁次數完成後突破「回調循環」。
//determine whether to flip pages forward or back - first forward
if(currentPagePos < foundPagePos){ // => turn right page
//determine how many times need to turn page
if (pageDifference > 1 && pageDifference % 2 !=0) {
var numPageTurns = (pageDifference-1)/2;
pageForward (numPageTurns);
} //else if ... rest omitted for brevity
}
function pageForward (numPageTurns){
var i = 0;
function next(){
i++;
if (i <= numPageTurns){
turnRightPage();
} else {
return;
}
}
next();
};
完整的代碼可以在這裏看到:http://jsfiddle.net/snshjyxr/1/
它翻開新的一頁,但只有一次!我錯過了什麼?
我對javascript/jQuery仍然很陌生,所以我的道歉,如果問題似乎太明顯了。任何指針讚賞。謝謝!
太棒了!非常感謝你,安託萬。儘管我不得不承認,但我仍然在努力理解這裏的回調函數是如何工作的。什麼是 if(typeof callback ==「function」){callback.call();位在這裏做? – marcor 2014-11-05 13:08:47
'if'部分只是檢查變量'callback'是否確實是一個函數,所以我們不會嘗試調用一個公共變量(這隻會引發錯誤)。 'callback.call()'只是調用'callback'變量中包含的函數。現在我想到了這一點,'callback()'可以做到這一點。我會編輯我的答案。 – 2014-11-05 15:23:57
請記住,當你想傳遞一個特定的上下文給你調用的函數時,'.call()'方法可以得心應手(例如,如果你想/需要'這個' ) – 2014-11-05 15:27:13