You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress后台子菜单点击时出现闪烁问题的解决求助

WordPress后台子菜单点击时出现闪烁问题的解决求助

大家好,我正在给WordPress后台菜单做自定义,想通过添加CSS和JavaScript实现点击时平滑展开/折叠的交互效果,但遇到了一个头疼的问题。

我的需求目标:

  • 点击带有子菜单的顶级菜单项时,展开对应的子菜单
  • 再次点击同一个顶级菜单项,折叠它的子菜单
  • 点击其他顶级菜单项时,收起当前所有展开的子菜单,再展开新点击的那一个
  • 点击子菜单项时,直接跳转链接,不影响菜单的展开/折叠状态

目前我的代码基本能实现功能,但有个明显的问题:点击子菜单项的时候会出现闪烁(短暂收起再展开),有时候重复点击同一个顶级菜单项也会出现这个情况。我猜测是因为每次点击菜单内的元素时,JS都会重新评估整个菜单结构,哪怕不需要改变菜单的展开状态也会触发操作。

我试了好几种JS/jQuery的写法来管理菜单状态和点击事件,但都没解决这个闪烁问题。下面是我目前在用的代码,你可以在任意WordPress后台菜单里测试复现这个问题:

JavaScript代码:

(function($) {
    $(document).ready(function() {

        $('#adminmenu .wp-submenu').hide(); 
        $('#adminmenu > li.wp-has-submenu > a').off();
        $('#adminmenu > li.wp-has-submenu > a').on('click', function(e) {
            e.preventDefault();
            var $menuItem = $(this).parent();
            var $submenu = $menuItem.find('.wp-submenu').first();

            if ($submenu.is(':visible')) {
                $submenu.slideUp(150, function() {
                    $menuItem.removeClass('opensub');
                });
            } else {
                $('#adminmenu .wp-submenu:visible').slideUp(150, function() {
                    $(this).parent().removeClass('opensub');
                });

                $submenu.slideDown(150, function() {
                    $menuItem.addClass('opensub');
                });
            }
        });

        var $currentMenuItem = $('#adminmenu li.current');
        if ($currentMenuItem.length) {
            var $parentMenu = $currentMenuItem.closest('li.wp-has-submenu');
            $parentMenu.addClass('opensub');
            $parentMenu.find('.wp-submenu').show(); 
        }
    });
})(jQuery);

CSS代码:

#adminmenu li.wp-has-submenu .wp-submenu {
    position: static !important;
    display: none;
    box-shadow: none !important;
}

#adminmenu .wp-not-current-submenu .wp-submenu,
.folded #adminmenu .wp-has-current-submenu .wp-submenu {
    border-left-width: 0 !important;
    border: 0 !important;
}
#adminmenu .wp-has-current-submenu ul>li>a, .folded #adminmenu li.menu-top .wp-submenu>li>a {
    padding: 5px 14px !important;
}

有没有大佬能帮忙看看怎么解决这个闪烁的问题呀?

备注:内容来源于stack exchange,提问作者Evantix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:59:31