次のように、関連するリストのみをターゲットにする必要があります。
var $dropdown;
$('.dropdown ul').hide();
$('.dropdown').hover(function() {
$dropdown = $(this).find('ul');
$dropdown.stop().slideDown(500);
}, function() {
$dropdown.stop().slideUp(200);
});
上記の変数を使用している唯一の理由は、同じドロップダウンで2回トラバースする必要がないためです。これは、入るのに良い習慣です。
もちろん、これも行うことができます。
$('.dropdown ul').hide();
$('.dropdown').hover(function() {
$(this).find('ul').stop().slideDown(500);
}, function() {
$(this).find('ul').stop().slideUp(200);
});
また、children( )の代わりにfind()を使用した理由は、DOMツリーを1レベル下に移動するだけで、複数レベルを下に移動して子孫要素を選択できるためです。children()
find()
あなたの特定のケースchildrend()
では、あなたはたった1レベル下にいるので、絶対に問題ないようです。
編集
完全を期すために、単一のホバー関数内でslideToggle()を使用する場合は、別の回答に示されているように実行できます。
$('.dropdown').hover(function() {
$(this).find('ul').stop(true, true).slideToggle(500);
}
ただし、このオプションを使用する場合は、スライドメニューが元に戻らないようにするためtrue, true
に、stop()lagging
呼び出しに含める必要がある場合があることに注意してください。
- clearQueueAキューに入れられたアニメーションも削除するかどうかを示すブール値。デフォルトはfalseです。
- jumpToEndA現在のアニメーションをすぐに完了するかどうかを示すブール値。デフォルトはfalseです。