問題は、ホバリングがすばやく発生するとグリッチが発生することです。それを避けるために離れていますか?
これはグリッチではありません。fadeIn
アニメーションを使用しています。アニメーションよりも速くリンクにカーソルを合わせると、その「グリッチ」の体験が完了します。
以前に実行中のアニメーションと衝突しないようにするには、現在のアニメーションとキューに入れられたアニメーションを停止する必要があります。
交換
$("div#images").children("img#" + ID).fadeIn("slow");
と
$("div#images").children("img#" + ID).stop(true, true).fadeIn("slow");
DEMO-次のアニメーションキューを開始する前にアニメーションキューをクリアします
ページが読み込まれたときに表示するデフォルトの画像を設定するにはどうすればよいですか?
デフォルトの画像も表示するコードを追加しました。デフォルトの画像を初めて使用するときにメニュー項目にカーソルを合わせたときに、奇妙な視覚効果を防ぐため。コードは、デフォルトの画像を表示しているかどうかを確認し、表示されている場合は、現在のメニューの画像がデフォルトの画像であるかどうかをさらに確認します。
そうである場合は、とにかく表示されているので非表示にしませんが、そうでない場合は、新しい画像をフェードインする前にデフォルトの画像を表示します。
これが理にかなっていることを願っています。以下の完全なコードとデモを参照してください。
// Indicates if default image is shown
var showingDefaultImage = true;
var $images = $("div#images");
var $defaultImage = $images.children("img#tacos");
// Display a default image
$defaultImage.show();
$("div#links > a").hover(
function() {
var ID = $(this).data("content");
var $image = $images.children("img#" + ID);
if (showingDefaultImage) {
showingDefaultImage = false;
if (!$image.is($defaultImage)) {
$defaultImage.hide();
}
}
$image.stop(true, true).fadeIn("slow");
}, function() {
$images.children().hide();
});
デモ-デフォルトの画像を表示
上記のデモのコードも、セレクターをキャッシュすることでもう少し最適化されています。
最後にホバーしたタグから最新の画像を残すことは可能でしょうか?(画像を非表示にして空白のままにする代わりに)
私が正しく理解していれば、マウスでメニューを離れるときに画像を非表示にするのではなく、最後にカーソルを合わせたメニューの画像を表示したままにします。
これを行うには、の2番目の関数を削除します。hover
これは不要になったため、mouseenter
代わりにイベントを添付できます。
var $images = $("div#images");
var $currentImage = $images.children("img#tacos");
$currentImage .show();
$("div#links > a").mouseenter(function() {
var ID = $(this).data("content");
var $image = $images.children("img#" + ID);
if (!$image.is($currentImage)) {
$currentImage.hide();
}
$currentImage = $image;
$image.stop(true, true).fadeIn("slow");
});
デモ-mouseenterで画像をフェードインし、最後の画像を表示したままにする
上記のコードには、最適化のためのセレクターのキャッシュと、新しいホバーされたメニュー項目が最後にホバーされたメニュー項目と同じであるときに「ちらつき」が発生しないようにするロジックが含まれています。