ここに問題を示す JSFiddle があります... http://jsfiddle.net/L2NBP/5/ 明らかな理由から、このコードは私の実際のコードの単純化されたバージョンであり、以下にも示されています。
CSS
#frame { left:0; position:absolute; width:190px; }
.layer { background:#FFF; position:absolute; right:0; top:0; width:190px; }
#process { z-index:1; }
#contact { z-index:2; }
#message { z-index:3; }
HTML
<div id="frame ">
<div id="process" class="layer">Processing...</div>
<div id="contact" class="layer"># Results Found</div>
<div id="message" class="layer">Results Updated</div>
</div>
<button onclick="javascript:ajaxMessage();">Click Here</button>
JS
function ajaxMessage(){
// if( $('#message').is(":animated") ) return;
$('#contact').fadeOut('slow',function(){
$('#message').fadeIn('slow')
.animate({opacity:1.0},1000)
.fadeOut('slow',function(){
$('#contact').fadeIn('slow');
});
});
}
詳細
AJAX に送信するフォームがあります.load()
。入力に UI Slider http://jqueryui.com/demos/slider/を使用しています。私は範囲オプションを使用しており、フォームにいくつかの入力「スライダー」があるため、AJAX は 1 秒間に複数回呼び出される可能性があります。完了すると成功メッセージが表示され.load()
ます。上記の JS Fiddle リンクでわかるように、メッセージは.animate()
http://api.jquery.com/animate/を使用してアニメーション化されます。
問題は、最初のアニメーションが完了する前に、メッセージを表示する関数が複数回呼び出されることです。これが発生すると、ユーザーがフォーム値の変更を停止した後も、アニメーションが積み重なって「点滅」します。私はこれを試しました... if( $('#message').is(":animated") ) return;
...しかし、まだスムーズに動作しません。基本的に、アニメーションの継続時間を動的に延長する方法を理解するか、少なくともそのように動作するように見せる必要があります。または、ユーザーがフォームに最後の変更を加えるまで、成功メッセージを遅らせます...例: ユーザーが変更を行ってから 2 秒が経過するまで、メッセージは表示されません。
何か案は?
受け入れられた回答
実際に受け入れられた回答... http://jsfiddle.net/L2NBP/7/
これをhttp://jsfiddle.net/L2NBP/5/のオリジナルと比較して ください。違いを確認するには、ボタンを 1 ~ 2 秒間に複数回クリックし、ボタンの右側にある応答テキストを確認してください。