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を呼び出すことはできません。

4

2 に答える 2

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
}
于 2012-10-25T19:26:52.693 に答える
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);
}
于 2012-10-25T19:31:51.287 に答える