You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

实现鼠标悬停指定元素显示Mega Menu,移出菜单时关闭

解决Mega Menu的悬停显示/关闭问题

我懂你的需求啦——现在已经能实现悬停"projects"链接时显示巨型菜单,但需要搞定鼠标移到巨型菜单上时保持显示,移出菜单项或菜单本身时才关闭的逻辑对吧?这是个很常见的交互场景,咱们可以通过结合鼠标事件和定时器来解决,避免鼠标在菜单项和菜单之间移动时误触发关闭。

下面是修改后的完整代码,我会一步步拆解逻辑:

jQuery(document).ready(function(){
    // 定义一个定时器变量,用来控制延迟关闭的逻辑
    let megaMenuTimeout;

    // 处理菜单项的悬停事件
    jQuery("#menu-item-15")
        .hover(function(){
            // 鼠标进入菜单项时,先清除之前的定时器(如果存在),立刻显示菜单
            clearTimeout(megaMenuTimeout);
            jQuery("#mega-menu-projects").show();
        }, function(){
            // 鼠标离开菜单项时,设置300ms的延迟关闭定时器
            // 这个延迟是给用户留够时间把鼠标移到巨型菜单上
            megaMenuTimeout = setTimeout(function(){
                jQuery("#mega-menu-projects").hide();
            }, 300);
        });

    // 处理巨型菜单本身的鼠标事件
    jQuery("#mega-menu-projects")
        .mouseenter(function(){
            // 鼠标进入菜单时,清除延迟关闭的定时器,让菜单保持显示
            clearTimeout(megaMenuTimeout);
        })
        .mouseleave(function(){
            // 鼠标离开菜单时,直接关闭菜单
            jQuery("#mega-menu-projects").hide();
        });
});

关键逻辑说明:

  • 定时器的核心作用:当用户从菜单项移开鼠标时,不会立刻关闭菜单,而是等待300毫秒(这个时长可以根据你的交互需求调整),如果用户在这段时间内把鼠标移到巨型菜单上,就会清除定时器,菜单继续保持显示。
  • 双向事件监听:同时监听菜单项和巨型菜单的鼠标进入/离开事件,覆盖所有场景:
    1. 鼠标悬停菜单项 → 立刻显示菜单
    2. 鼠标从菜单项移到菜单 → 保持菜单显示
    3. 鼠标从菜单直接移走 → 关闭菜单
    4. 鼠标直接从菜单项移走(没碰菜单) → 延迟后关闭菜单

如果想让菜单的显示/关闭更平滑,还可以把show()hide()换成fadeIn(200)fadeOut(200),给交互加上渐变过渡效果~

内容的提问来源于stack exchange,提问作者Crashy

火山引擎 最新活动