将鼠标悬停在wordpress菜单中

时间:2014-07-16 12:14:37

标签: javascript jquery wordpress navigationbar

我使用了一个主题,我更改为水平显示子菜单,现在我想显示子菜单onClick而不是悬停,我不擅长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”,但它不起作用,我该怎么办?

2 个答案:

答案 0 :(得分:1)

当有人目前徘徊时会发生什么事情,它会在悬停时完成一件事,当他们离开时,必须排除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);
        }
    };

答案 1 :(得分:1)

这看起来过于复杂。你有实时版本的链接吗?

通常,当使用可点击的父级进行点击查看子菜单时,我设置一个变量以查看菜单是否打开,如果不是,则不进行链接。如果是这样,请转到链接。

示例:http://codepen.io/jhealey5/pen/iLgom

    var $handle = $('.sub-menu').prev();

    var opened = 0;
    $handle.on('click', function(e){

      if (opened) {
        window.location.href = $(this).attr('href');
      } else {
        e.preventDefault();
        e.stopPropagation();
        $('.sub-menu').slideToggle();
        opened = 1;
      }
    });

    $('html').on('click', function(){
      if (opened) {
        $('.sub-menu').slideToggle();
        opened = 0;
      }
    });

根据您的菜单,您可以使用类似的东西。但它在菜单中使用了大量代码。