2012-06-01 2 views
7

HTML:jQuery。 queue()と何か別のコールバック関数を使用するのとはどのように違いますか?

<span>hello world!</span> 

JS:(コールバックを使用して)

$('span').click(function() { 
    $(this).animate({ 
    fontSize: '+=10px' 
    }, 'slow', function() { 
    // callback after fontsize increased 
    $(this).text( $(this).text() + ' rolled! '); 
    }); 
}); 

たびSPANがクリックされるように、テキストのフォントサイズが増加した後、代わりに一緒に起こっての添付 'ロール'。

JS:(キューを使用して())

$('span').click(function() { 
    $(this).animate({ 
    fontSize: '+=10px' 
    }, 'slow'}) 
    .queue(function() { 
    $(this).text( $(this).text() + ' rolled! '); 
    }); 
}); 

私はそれらの間の違いは何であるかわからないだけでなく、このような

そして、それはキューを(使用して行うことができます)。どちらも同じことをする。

なぜコールバックを使用するよりもqueue()が優れていますか(またはそうでないのはなぜですか)。 queue()について特別なものは何ですか?

ありがとうございました。

+1

チェックこのスレッド - http://stackoverflow.com/questions/1058158/can-somebody-explain-jquery-queue-to-me答えるため –

答えて

1

アニメーションを入れているとあなたは同じキューで(あなたのコード内の他のspecifie)より多くのイベントを置くことができます。

をだから、コールバックは、アニメーションの準備ができて、しかし、の場合は直後に実行されますqueue()を使用すると、最初に実行されるキュー内に他のイベントが存在する可能性があります。

この動作の利点は、同時イベント(スライドアップとスライドダウンなど)が同時に実行されず、奇妙なことが起こることです。

例:

$('div').click(function() { 
    $(this).animate({ 
    color: 'green' 
    }, 'slow'}) 
    .queue(function() { 
    $(this).text(' got colored! '); 
    }); 
}); 

$('span').click(function() { 
    $(this).animate({ 
    fontSize: '+=10px' 
    }, 'slow'}) 
    .queue(function() { 
    $(this).text( ' got bigger! '); 
    }); 
}); 

あなたが最初のdivをクリックして、すぐにスパンその後、今あなたがdiv要素のキューが最初に実行されることを確認することができ、そしてそれは準備ができて、キューいる場合スパンの実行が実行されます。

コールバックの場合、最初に準備が整ったアニメーションに属するものが最初に実行されます。同時に準備ができれば、同時に両方が実行されます。この場合、「色付きだ」と表示されない場合があります。テキストまたは '大きくなった!'テキスト。

+0

おかげで、理解するのは難しいですが、あなたには例がありますか? – gilzero

+0

@gilzero:added example – iddo

+1

@tangelo私はこの答えを全く理解していません。この例はあなたの説明と一致しません。 "div"アニメーションが "span"アニメーションにどのように関連しているか説明できますか? –

0

callbackパラメータを使用することは、.queue(callback)メソッドを使用する場合とまったく同じです。
アニメーションにcallbackを指定すると、.queueと同じ方法でコールバックをキューに入れるだけです。

.queue(callback)は、アニメーションとは別にコールバックを追加するもう1つの方法です。
そうする完全に有効な理由があります:

$(this).animate(...); 
if (shouldDoCallback) { 
    $(this).queue(...); 
}