0

なぜこれがそのように機能するのかを理解しようとしています。アラート ダイアログがスクリプトの実行をブロックしているという印象を受けました。それでも、スクリプトは、画面を更新せずに、裏で実行が継続されているかのように動作しています。

次のコードを使用します。

function highlightItems(itemA, itemB, msg) {

    $(itemA).effect("highlight", {}, 800);

    window.alert(msg);

    // $(itemB).delay(1);
    $(itemB).effect("highlight", {}, 800);
}

アラート ダイアログを閉じると、itemB のハイライト効果が既に行われています。(アラートをすばやく閉じると、効果の末尾をキャッチできます。) アラート ボックスを閉じる前に効果が始まったかのようです。

私が考えることができるのは、エフェクト()が時間自体に使用しているものは何でも、アラート()の呼び出しによってスローされているということだけです。.delay のコメントを外すと、ハイライトは期待どおりに機能します。警告ボックスが閉じられた直後に開始されます。つまり、.delay 関数がエフェクト タイマーを「リセット」するということでしょうか?

これは大きな問題ではありません... ここで何が起こっているのかを理解しようとしているだけです。私の通常の Google スキルは、今日は役に立ちませんでした。

編集- 私が意味することの例については jsfiddle : jsfiddle.net/kA2uV/

編集 2

これは明らかに、同じ .effect が連続して 2 回使用された場合にのみ影響します。別の効果が使用されている場合、問題は発生しません: jsfiddle.net/yXSgu/3/

4

3 に答える 3

1

IIRC、jQuery アニメーションは日付/時刻に基づいており、主に setTimeout や setInterval では処理されません。JavaScriptが停止している間、時間は進み続けます。

編集:あなたの言いたいことはわかりますが、日付/時刻に関係していると思いますが、おそらく jQuery の $.now() の内部使用は、この場合は .delay(1) と組み合わされたアラートによってスローされています

于 2012-10-10T21:21:47.713 に答える
0

アラート機能は、プログラムの状態を「一時停止」するため、プログラムが閉じられたときにプログラムが再開されます。意図したよりも長く待機していないことを保証するために、アラートの後に遅延が発生する必要があります。

于 2012-10-10T21:22:00.980 に答える
0

これは、ハイライトが発生するためですが、アラートは起動する前に終了するのを待ちません。これは、期待どおりに動作する修正バージョンです。(アラートが表示される前にハイライトが終了します)

さらに、別のポスターが言ったように、jQuery は時間値を使用してアニメーションを実行するため、この例ではハイライトを「一時停止」しません。

http://jsfiddle.net/yXSgu/

于 2012-10-10T21:22:02.960 に答える