2012-10-25 46 views
1

我將jquery中的一些動畫與一些ajax加載結合起來 - 從函數A中,我希望能夠調用函數B來淡出當前內容,一旦動畫完成,返回運行函數A中的其餘代碼。這可能嗎?我想象這樣的事情:等待一個函數返回值,然後繼續執行其他函數的其他命令

function buttonClicked(){ 
    if(sectionHidden != true){ 
    hideSection($sectionRef); 
    } 
    //RUN THE FOLLOWING AFTER HIDE SECTION HAS FINISHED (FUNCTION B) 
    loadSection(); 
} 

function hideSection($sectionRef){ 
    $sectionRef.fadeTo(500,0,function(){ 
    return someValue; 
    }); 
} 

因爲在我的代碼中的一些其他複雜(多種功能調用hideSection)的,我不能從hideSection調用loadSection。

回答

5

.fadeTo()需要一個回調參數,當淡出完成時調用該參數。您只需提供loadSection功能即可。即:

function buttonClicked() { 
    if (!sectionHidden) { 
     hideSection($sectionRef, loadSection); 
    } 
    else { 
     loadSection(); 
    } 
} 

function hideSection($sectionRef, doneCallback) { 
    $sectionRef.fadeTo(500, 0, doneCallback); 
} 

如果你不想從你的代碼的另一部分叫hideSection()後加載部分:

function someStuff() { 
    //stuff... 
    hideSection($superRef); //won't call loadSection() 
    //more stuff 
} 
+0

對不起 - 由於一堆網站等併發症,我無法處理就這樣。 – mheavers

+0

我喜歡。好的。你可以解釋爲什麼嗎?Troll很多 – PeeHaa

+0

最終你要麼必須這樣做(通過回調)或做某種類型的輪詢機制,這將是相當笨拙 – Claudiu

0

不幸的是沒有,這不是JavaScript的工作方式。在JS中,你的代碼不應該被阻塞。 改爲使用回調:在函數A中調用fadeTo並在回調中提供函數A的其餘部分。當fadeTo完成時調用回調。

jquery fadeTo()

$('#clickme').click(function() { 
    $('#book').fadeTo('slow', 0.5, function() { 
     // Animation complete. 
    }); 
    }); 

編輯:您的代碼應該是這個樣子......

function buttonClicked(){ 
    if(sectionHidden != true){ 
    hideSection($sectionRef, function(){ 
     loadSection(); 
    }); 
    } 
} 

function hideSection($sectionRef, func){ 
    $sectionRef.fadeTo(500,0,func); 
} 
相關問題