javascript - 将鼠标悬停在 wordpress 菜单中单击

标签 javascript jquery wordpress navigationbar

我使用了一个我更改为水平显示子菜单的主题,现在我想在点击时显示子菜单而不是悬停时,我不擅长 javascript,但我认为这段代码是关于导航菜单的:

var nav = {
    init: function() {

        // Add parent class to items with sub-menus
        jQuery("ul.sub-menu").parent().addClass('parent');

        var menuTop = 40;
        var menuTopReset = 80;

        // Enable hover dropdowns for window size above tablet width
        jQuery("nav").find(".menu li.parent").hoverIntent({
            over: function() {
                if (jQuery('#container').width() > 767 || jQuery('body').hasClass('responsive-fixed')) {

                    // Setup menuLeft variable, with main menu value
                    var subMenuWidth = jQuery(this).find('ul.sub-menu').first().outerWidth(true);
                    var mainMenuItemWidth = jQuery(this).outerWidth(true);
                    var menuLeft = '-' + (Math.round(subMenuWidth / 2) - Math.round(mainMenuItemWidth / 2)) + 'px';
                    var menuContainer = jQuery(this).parent().parent();

                    // Check if this is the top bar menu                            
                    if (menuContainer.hasClass("top-menu")) {
                        if (menuContainer.parent().parent().parent().hasClass("top-bar-menu-right")) {
                        menuLeft = "";
                        } else {
                        menuLeft = "-1px";
                        }
                        menuTop = 30;
                        menuTopReset = 40;
                    } else if (menuContainer.hasClass("header-menu")) {
                        menuLeft = "-1px";
                        menuTop = 28;
                        menuTopReset = 40;
                    } else if (menuContainer.hasClass("mini-menu") || menuContainer.parent().hasClass("mini-menu")) {
                        menuTop = 40;
                        menuTopReset = 58;
                    } else {
                        menuTop = 44;
                        menuTopReset = 64;
                    }

                    // Check if second level dropdown
                    if (jQuery(this).find('ul.sub-menu').first().parent().parent().hasClass("sub-menu")) {
                        menuLeft = jQuery(this).find('ul.sub-menu').first().parent().parent().outerWidth(true) - 2;
                    }

                    jQuery(this).find('ul.sub-menu').first().addClass('show-dropdown').css('top', menuTop);
                }
            },
            out:function() {
                if (jQuery('#container').width() > 767 || jQuery('body').hasClass('responsive-fixed')) {
                    jQuery(this).find('ul.sub-menu').first().removeClass('show-dropdown').css('top', menuTopReset);
                }
            }
        });

        jQuery(".shopping-bag-item").live("mouseenter", function() {

            var subMenuTop = 44;

            if (jQuery(this).parent().parent().hasClass("mini-menu")) {
                subMenuTop = 40;
            }

            jQuery(this).find('ul.sub-menu').first().addClass('show-dropdown').css('top', subMenuTop);
        }).live("mouseleave", function() {
            if (jQuery('#container').width() > 767 || jQuery('body').hasClass('responsive-fixed')) {
                jQuery(this).find('ul.sub-menu').first().removeClass('show-dropdown').css('top', 64);
            }
        });

        // Toggle Mobile Nav show/hide          
        jQuery('a.show-main-nav').on('click', function(e) {
            e.preventDefault();
            if (jQuery('#main-navigation').is(':visible')) {
            jQuery('.header-overlay .header-wrap').css('position', '');
            } else {
            jQuery('.header-overlay .header-wrap').css('position', 'relative');
            }
            jQuery('#main-navigation').toggle();
        });

        jQuery(window).smartresize(function(){  
            if (jQuery('#container').width() > 767 || jQuery('body').hasClass('responsive-fixed')) {
                var menus = jQuery('nav').find('ul.menu');
                menus.each(function() {
                    jQuery(this).css("display", "");
                });
            }
        });

        // Set current language to top bar item
        var currentLanguage = jQuery('li.aux-languages').find('.current-language span').text();
        if (currentLanguage !== "") {
            jQuery('li.aux-languages > a').text(currentLanguage);
        }

    },
    hideNav: function(subnav) {
        setTimeout(function() {
            if (subnav.css("opacity") === "0") {
                subnav.css("display", "none");
            }
        }, 300);
    }
};

我尝试将“hoverIntent”替换为“click”,但它不起作用,我该怎么办?

最佳答案

当有人悬停时发生了什么,它在悬停时做一件事,当他们离开时它必须做一种cleanup,这是hoverintent中的两个功能,即overout 因此代码需要分成两个事件监听器,一个用于元素的 click ,另一个用于 blur

我已将两个监听器链接到初始选择器,因此它应该都能正常工作。

    var nav = {
        init: function() {

            // Add parent class to items with sub-menus
            jQuery("ul.sub-menu").parent().addClass('parent');

            var menuTop = 40;
            var menuTopReset = 80;

            // Enable click dropdowns for window size above tablet width
jQuery("nav").find(".menu li.parent").on('click', function (event) {
    if($(event.target).parent().hasClass('menu-item-has-children')){
     event.preventDefault();
    };
    if (jQuery('#container').width() > 767 || jQuery('body').hasClass('responsive-fixed')) {
        // Setup menuLeft variable, with main menu value
        var subMenuWidth = jQuery(this).find('ul.sub-menu').first().outerWidth(true);
        var mainMenuItemWidth = jQuery(this).outerWidth(true);
        var menuLeft = '-' + (Math.round(subMenuWidth / 2) - Math.round(mainMenuItemWidth / 2)) + 'px';
        var menuContainer = jQuery(this).parent().parent();

        // Check if this is the top bar menu                            
        if (menuContainer.hasClass("top-menu")) {
            if (menuContainer.parent().parent().parent().hasClass("top-bar-menu-right")) {
                menuLeft = "";
            } else {
                menuLeft = "-1px";
            }
            menuTop = 30;
            menuTopReset = 40;
        } else if (menuContainer.hasClass("header-menu")) {
            menuLeft = "-1px";
            menuTop = 28;
            menuTopReset = 40;
        } else if (menuContainer.hasClass("mini-menu") || menuContainer.parent().hasClass("mini-menu")) {
            menuTop = 40;
            menuTopReset = 58;
        } else {
            menuTop = 44;
            menuTopReset = 64;
        }

        // Check if second level dropdown
        if (jQuery(this).find('ul.sub-menu').first().parent().parent().hasClass("sub-menu")) {
            menuLeft = jQuery(this).find('ul.sub-menu').first().parent().parent().outerWidth(true) - 2;
        }

        jQuery(this).find('ul.sub-menu').first().addClass('show-dropdown').css('top', menuTop);
    }
}).on('mouseleave',function () {
    if (jQuery('#container').width() > 767 || jQuery('body').hasClass('responsive-fixed')) {
        jQuery(this).find('ul.sub-menu').first().removeClass('show-dropdown').css('top', menuTopReset);
    }
});     
            // Toggle Mobile Nav show/hide          
            jQuery('a.show-main-nav').on('click', function(e) {
                e.preventDefault();
                if (jQuery('#main-navigation').is(':visible')) {
                jQuery('.header-overlay .header-wrap').css('position', '');
                } else {
                jQuery('.header-overlay .header-wrap').css('position', 'relative');
                }
                jQuery('#main-navigation').toggle();
            });

            jQuery(window).smartresize(function(){  
                if (jQuery('#container').width() > 767 || jQuery('body').hasClass('responsive-fixed')) {
                    var menus = jQuery('nav').find('ul.menu');
                    menus.each(function() {
                        jQuery(this).css("display", "");
                    });
                }
            });

            // Set current language to top bar item
            var currentLanguage = jQuery('li.aux-languages').find('.current-language span').text();
            if (currentLanguage !== "") {
                jQuery('li.aux-languages > a').text(currentLanguage);
            }

        },
        hideNav: function(subnav) {
            setTimeout(function() {
                if (subnav.css("opacity") === "0") {
                    subnav.css("display", "none");
                }
            }, 300);
        }
    };

关于javascript - 将鼠标悬停在 wordpress 菜单中单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24780545/

相关文章:

javascript - 加载angularjs定时器加15分钟

javascript - 如何使用 jQuery 在单击事件上选择下一个 ul

javascript - jQuery 表单提交仅在 IE10+ 上不响应

javascript - WordPress:jquery.js 不会移动到页脚

WordPress - 自定义评论 - 父/嵌套回复

javascript - 使用 JavaScript 控制特定电子邮件模式

javascript - 无法在 React.js 中为按钮切换类

javascript - jquery .slideUp 多次调用时表现奇怪

jquery - 使用jquery查找所有iframe src

wordpress - $wp_query 何时初始化以及如何覆盖它?