我想做什么:
我的网站上有一个导航栏。一些导航链接有与之相关联的子菜单。我希望能够将鼠标悬停在具有子菜单的导航链接上,然后让子菜单出现。
但是,我希望子菜单根据窗口大小的不同而以不同的方式出现:
如果窗口宽度大于等于960像素,则我的导航栏是水平的。我希望子菜单作为下拉菜单出现在页面上方的其他内容之上。
如果窗口宽度小于960像素,则我的导航栏是垂直的。我希望子菜单作为手风琴式菜单出现,将其他导航链接向下推。
我还希望我的脚本在页面加载完成和调整窗口大小时执行。
我的脚本:
function navMenu() {
if ($(window).width() >= 960) {
$('.menu-item-has-children').hover(function() {
$(this).children(".sub-menu").css('display', 'block');
}, function() {
$(this).children(".sub-menu").css('display', 'none');
});
} else {
$('.menu-item-has-children').hover(function() {
$(this).children(".sub-menu").slideToggle(500);
}, function() {
$(this).children(".sub-menu").slideUp(500);
});
}
}
$(document).ready(function() {
navMenu();
});
$(window).resize(function() {
navMenu();
});
发生了什么:
当$(document).ready()
被触发时,上述脚本可以正常工作。
问题在于:如果我在加载完页面后调整窗口大小,该脚本会创建多个mouseover
和mouseout
事件监听器。悬停在导航链接上会导致子菜单反复弹跳。
您可以在此处查看我的意思:https://codepen.io/ben393/pen/qLrMmX。
我尝试过的一些方法(目前还没有奏效):
将
.hover()
作为($(window).width() >= 960)
的一个函数将
$(document).ready()
作为$(window).resize()
的一个函数
有什么想法吗?谢谢!