好的,我们开始吧。首先,为了让“子菜单”更容易隐藏,我给每个子菜单添加了一个类。这为调用提供了一个焦点,不仅在 CSS 中,而且在 jquery 分配中也是如此。
<div id="request-it-menu" class="sub-menu">
在css中,除了给子菜单一个隐藏显示和一个相对位置外,我这里并没有什么特别之处。现在你可以重新设计你喜欢的方式,我在这里给出了相对位置,以便子菜单可以使用top
.
.sub-menu { display: none; position: relative; }
有了这些,我们就可以使用 JavaScript 了……几乎!还有一件事!在你的菜单 HTML 中,我为每个图像添加了一个数据变量。我用这个变量来保存ID
每个.sub-menu
. 现在这不是必需的,毕竟,您可以做一个复杂的语句来使用从图像 id 中删除单词按钮并将其更改为菜单,但是为什么要复杂呢?
<img id="request-it-button" data-submenu="#request-it-menu"
最后!JavaScript。由于我们的数据变量,在这一点上进行“动态”和“单数”调用真的很容易。首先,我使用 jQuery 的 .on() 方法的委托版本,以便将鼠标事件添加到给定选择器的动态元素中。选择器本身是一个“Blanket”语句,这意味着它抓住了所有适合它的非常简单的描述。在这种情况下,我只是直接使用 head 菜单 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();
})
})