2011-01-13 16 views
0

私は、タブの切り替えを管理するための軽量のjqueryプラグインを作成しました。これは開発とテストでうまく機能しています。私は開けたときに高さを広げて閉じたときに高さを収めるという奇妙な条件をタブの1つに持たせました。変更はアニメーションでなければならず、タブの切り替えが完了したときに起動するコールバックを使用して簡単に開始できます。プラグインの実行をコールバックから遅延させるにはどうすればよいですか?

閉じるアニメーションを動作させることはできませんが、これはアニメーションが完了する前にプラグインが引き続きタブを隠しているためです。

コールバック関数が完了するまでプラグインを強制的に一時停止することはできますか?

私はコールバックを発射するために使用しているコードは、私が実際にタブがある

+0

はあなたのことができます元のコールバックにコールバックを送信しないでください。 – RobertPitt

+0

私はそれを考えていましたが、私の会社はこのプラグインをより多くの場所で使い始めるかもしれませんが、プラグインの大半がコールバックに書かれているように、本当にどうしたらいいかわかりませんが他のすべてが失敗する可能性があります。 – SigInTheHead

答えて

0

あなたはプラグインした場合は、知っているプラ​​グインで管理するアニメーションの道を行きたくない

if($.isFunction(params.click)){ 
    params.click.apply(this,[content,tab,set]); 
}; 

です現在は「開いている」と表示され、別のタブを閉じると同時に新しいタブが開くようになります。

したがって、クライアントコードで提供されるコールバック関数を呼び出す権限がある場合は、新しいタブを開くために、以前に開いたタブで「閉じる」コールバックを呼び出す必要がありますか?

+0

はい、その閉じるコールバックでは、クライアントコードがアニメーションを実行しています。プラグインを実行すると、現在開いているタブと実行中のアニメーションが隠されるためです。クライアントコードでインスタンス化されたアニメーションでは、通常のjquery.animateコールバックを使用してプラグインを停止することはできません。基本的に実行したいのは同期コールバックを同期的に実行することです。つまり、プラグインはコールバックが完了しました – SigInTheHead

+0

ユーザビリティ上の理由から、実際の一時停止は決してありません。恐ろしい考えです。元の質問の半分に答えるために、jQueryでプラグインの実行を一時停止するAPIはありません。私はあなたが 'tabClos​​ing'と' tabOpening'コールバックを持っていることをお勧めします。これは、ユーザーが新しいタブを選択すると同時に呼び出されます。私はあなたの後に効果を作成するためにそれをどのように使うことができるかを答えによって更新します。 –

0

ユーザーがタブを変更するたびに、新しいタブに対してtabOpeningイベントが発生し、古いタブに対してtabClosingイベントが呼び出されるように、タブの開閉の両方に対してコールバックを作成します。

プラグインを簡単に使用できるようにするには、最初にドキュメントが特定されている必要があります。

単に
var $closingTab = null, 
    $openingTab = null; 

$('#target').yourPlugin({ 
    tabClosing: function(tab) { 
     $closingTab = $(tab); 
    }, 
    tabOpening: function(tab) { 
     $openingTab = $(tab); 
     // Animate the 
     $closingTab.animate({}, 1000, function() { 
      $openingTab.animate({}, 1000); 
     }); 
    } 
}); 

以上、あまり原始あなたが全体のイベントをecapsulateできtabChangeコールバックを持つことができます:tabClosingは次のようにあなたがして、クライアントのコードを書くことができ最初の発砲であろうと仮定すると、

$('#target').yourPlugin({ 
    tabChange: function(oldTab, newTab) { 
     $(oldTab).animate({}, 1000, function() { 
      $(newTab).animate({}, 1000); 
     }); 
    } 
}); 
+0

最初に返信いただきありがとうございます。私はプラグインが軽量であると言ったとき、私は本当にそれを意味しました。上記のようにすれば、多くのプラグインが冗長になります。私は、このコードがサイトのメインスクリプトファイルに追加する必要があると思っています。 – SigInTheHead

関連する問題