では、行きましょう。まず、「サブメニュー」を隠しやすくするために、各サブメニューにクラスを追加しました。これにより、CSS だけでなく、jquery の代入についても、1 つのフォーカル ポイントを呼び出すことができます。
<div id="request-it-menu" class="sub-menu">
css では、サブメニューに非表示の表示と相対的な位置を与えることを除いて、ここでは特別なことはしませんでした。これで、好きなように再設計できます。サブメニューを を使用して配置できるように、ここで相対的な位置を指定しtop
ました。
.sub-menu { display: none; position: relative; }
以上で、JavaScript にたどり着きます ... ほとんどです! もう一つ!You're menu HTML では、各画像にデータ変数を追加しました。この変数を使用してID
、各の を保持しました.sub-menu
。これは必要ありません。画像 ID からボタンという単語を削除してメニューに変更するという複雑なステートメントを作成することもできますが、なぜ複雑になるのでしょうか。
<img id="request-it-button" data-submenu="#request-it-menu"
ついに!JavaScript。この時点で、データ変数のおかげで、呼び出しを「動的」と「単一」の両方にするのは非常に簡単です。最初に、jQuery の .on() メソッドのデリゲート バージョンを使用して、指定されたセレクターの動的要素にもマウス イベントを追加します。セレクター自体は「ブランケット」ステートメントです。つまり、非常に単純な説明に適合するすべてのものを取得します。この場合、私は単純にヘッド メニュー ID を img の内部に直接使用します。
$(function() { // same as $(document).ready(function() { ...
// calling this way in jquery is using "delegate" form of .on
// this assures function to even dynamic elements of the fitting selector
$(document).on("mouseenter", "#topMenu > img", function(e) {
var menu = $(this).data("submenu");
// position part here is temporary till you decide how you want css to arange sub menu's
$(menu).css("top", $(this).position().top-9).show();
})
.on("mouseleave", "#topMenu > img", function(e) {
var menu = $(this).data("submenu");
$(menu).hide();
})
})
コメントに基づいて修正
$(function() {
var tmrSubMenu;
$(document).on("mouseenter", "#topMenu > img", function(e) {
$(".sub-menu").hide();
var menu = $(this).data("submenu");
$(menu).css("top", $(this).position().top-9).show();
})
.on("mouseleave", "#topMenu > img", function(e) {
var menu = $(this).data("submenu");
tmrSubMenu = setTimeout(function() { $(menu).hide(); }, 100);
})
.on("mouseenter", ".sub-menu", function(e) {
clearTimeout(tmrSubMenu);
})
.on("mouseleave", ".sub-menu", function(e) {
$(this).hide();
})
})