積み上げられた一連の画像と、画像の右側に一連の文があります。私のプログラムは次のように動作します: 文の上にカーソルを合わせると、対応する画像がスタックの前面にフェードインし、前の画像がフェードアウトします。onmouseenter と onmouseleave を使用するホバー関数があり、両方で、正しいアニメーション プロセスを実行するためにヘルパー関数が呼び出されます。
私が抱えている問題は、アニメーションが最初の文で実行されているときに別の文にカーソルを合わせると、壊れることです。stop(true, true) を調査し、現在のホバー オーバーでアニメーションが完了するとコールバック関数を作成する可能性がありますが、これらは効果の修正ではありません。
現在の進行が完了するまで、将来のアニメーションをフリーズする方法を知っている人はいますか? 配列キューに追加する必要はありませんが、アニメーションの進行状況を確認するために、フェード呼び出し内にブール変数を設定できます。
考えられる解決策: onHover() の onmouseleave 状態で、setTimeOut を 300 ミリ秒の遅延で呼び出して、デフォルトの img にアクティブなクラスがあるかどうかを確認し、そうでない場合はアニメーション化します (つまり、ユーザーがセンテンス、300ミリ秒後、デフォルトの画像がフェードインします)。この関数に追加して、ユーザーが他の文にカーソルを合わせた場合、次のカーソルのアニメーションを遅らせることができると思います。
私が試したこと
//get rid of intitial page load animation classes
$('#pics img').not($currentCase).not('.active').removeClass('first next-in-line last-in-line');
do {
$currentCase
//before this image is faded in, we need to add the next-in-line class so it is stacked right below the top image
.addClass('next-in-line')
.fadeIn(fadeSpeed, function () {
($(this).removeClass('next-in-line'))
});
} while ($('#pics img.active').is(':animated'));
$currentCase.addClass('active');
- 上記は、文の上にホバーを開始するときにスクリプトをフリーズします。
*私の答え: * 同様の問題に遭遇した可能性がある人のために、fadeIn() のコールバック関数で、修正のために以下のコードを使用しました。
$('.active').removeClass('active').hide();