Это на самом деле не ответ на ваш вопрос, но я думаю, что вы слишком усложнили себя, и этот ответ мог бы помочь другим людям ... Для моего текущего проекта мне нужно то же самое, и я придумал отличную идею , В HTML я сделал таблицы для каждой части меню:
<ul class='custom-menu' id="main-menu">
<li data-action="One">Custom menu click one</li>
<li data-action="Two">Custom menu click two</li>
<li data-action="Three">Custom menu click three</li>
</ul>
<ul class='custom-menu' id="subMenuOne">
<li data-action="sub1">Sub Menu One</li>
<li data-action="sub2">Sub Menu Two</li>
<li data-action="sub3">Sub Menu Three</li>
</ul>
Затем я добавил стиль к таблицам и сделал так, чтобы при наведении курсора на строку она меняла цвет, на мышке менялся значок. Вам не нужен именно этот стиль. Будьте креативны:
.custom-menu {
display: none;
z-index: 1000;
position: absolute;
overflow: hidden;
border: 1px solid #CCC;
white-space: nowrap;
font-family: sans-serif;
background: #FFF;
color: #333;
border-radius: 5px;
padding: 0;
}
.custom-menu li {
padding: 8px 12px;
cursor: pointer;
list-style-type: none;
transition: all .3s ease;
user-select: none;
}
.custom-menu li:hover {
background-color: #DEF;
}
Дисплей : нет , чтобы скрыть таблицу. Он появится при щелчке правой кнопкой мыши ...
Затем мне понадобился JavaScript, чтобы сделать его контекстным меню. Я начал с того, что главное меню появилось при щелчке правой кнопкой мыши:
$(document).bind("contextmenu", function (event) {
event.preventDefault();
$("#main-menu").finish().toggle(100).css({
top: event.pageY + "px",
left: event.pageX + "px"
});
});
event.preventDefault()
предотвращает появление пользовательского меню по умолчанию и позволяет вместо этого отображать мое меню ...
Теперь мне нужно проверить, нажали ли <li></li>
:
$("#main-menu li").click(function(){
switch($(this).attr("data-action")) {
case "One": alert("One"); break;
case "Two": alert("Two"); break;
case "Three": alert("three"); break;
}
$("#main-menu").hide(100);
});
При нажатии <li></li>
этот код сначала находит, какой из них был нажат с помощью data-action , присваиваемого каждому <li></li>
. Затем, в конце, прячется #main-menu
.
Но теперь мы хотим, чтобы появилось подменю. Как ? Что ж, мы просто заставляем его отображаться так же, как и главное меню, но в той же позиции, с этим кодом:
$("#allBlocks").finish().toggle(100).css({
top: $("#main-menu").css("top"),
left: $("#main-menu").css("left"),
});
Мы просто вставляем этот код вместо предупреждений в один из случаев. Здесь я вставил его в число ТРИ
$("#main-menu li").click(function(){
switch($(this).attr("data-action")) {
case "One": alert("One"); break;
case "Two": alert("Two"); break;
case "Three":
$("#subMenuOne").finish().toggle(100).css({
top: $("#main-menu").css("top"),
left: $("#main-menu").css("left"),
});
break;
}
$("#main-menu").hide(100);
});
Затем, чтобы закончить, мы помещаем тот же механизм щелчка в подменю, VOILA . У вас есть отличное меню, работающее ...
Вот ссылка на JSFiddle , для большего понимания ..
Надеюсь, это кому-то помогло
:) f