javascript - Web - 菜单不响应 1024-1200 范围内的点击

标签 javascript jquery html css

下午好

对于 1024-1200 像素的范围,菜单不响应任何点击并且不应用菜单的效果。 这很奇怪,因为它仅适用于此视口(viewport)屏幕分辨率。

如果您访问此网站 (https://www.webpulse.com.br/menuzord/icons.html) 并使用 Google Chrome 的设备工具栏并调整视口(viewport)窗口的大小 (1024x1366px),您将看到点击没有响应。

当我将视口(viewport)宽度设置为 800px 并将其调整为 1024px 时,它起作用了,但如果我尝试直接这样做,它就不起作用了。
我已经在 Linux Mint 上尝试过 Chrome、chromium 和 Opera,对于这个分辨率,结果是一样的。

(function($){

jQuery.fn.menuzord = function(options){
    var settings;
    $.extend( settings = {
        showSpeed: 300,
        hideSpeed: 300,
        trigger: "hover",
        showDelay: 0,
        hideDelay: 0,
        effect: "fade",
        align: "left",
        responsive: true,
        animation: "none",
        indentChildren: true,
        indicatorFirstLevel: "+",
        indicatorSecondLevel: "+",
        scrollable: true,
        scrollableMaxHeight: 400
    }, options);

    // variables
    var menu_container = $(this);
    var menu = $(menu_container).children(".menuzord-menu");
    var menu_li = $(menu).find("li");
    var showHideButton;
    var mobileWidthBase = 991;
    var bigScreenFlag = 2000; // a number greater than "mobileWidthBase"
    var smallScreenFlag = 200; // a number less than "mobileWidthBase"

    // dropdown/megamenu indicators
    $(menu).children("li").children("a").each(function(){
        if($(this).siblings(".dropdown, .megamenu").length > 0){
            $(this).append("<span class='indicator'>" + settings.indicatorFirstLevel + "</span>");
        }
    });
    $(menu).find(".dropdown").children("li").children("a").each(function(){
        if($(this).siblings(".dropdown").length > 0){
            $(this).append("<span class='indicator'>" + settings.indicatorSecondLevel + "</span>");
        }
    });

    // navigation alignment
    if(settings.align == "right"){ 
        $(menu).addClass("menuzord-right"); 
    }

    // dropdown indentation (mobile mode)
    if(settings.indentChildren){ 
        $(menu).addClass("menuzord-indented"); 
    }

    // responsive behavior
    if(settings.responsive){ 
        $(menu_container).addClass("menuzord-responsive").prepend("<a href='javascript:void(0)' class='showhide'><em></em><em></em><em></em></a>");
        showHideButton = $(menu_container).children(".showhide");
    }

    // scrollable menu
    if(settings.scrollable){
        if(settings.responsive){
            $(menu).css("max-height", settings.scrollableMaxHeight).addClass("scrollable").append("<li class='scrollable-fix'></li>");
        }
    }

    // shows a dropdown
    function showDropdown(item){
        if(settings.effect == "fade")
            $(item).children(".dropdown, .megamenu").stop(true, true).delay(settings.showDelay).fadeIn(settings.showSpeed).addClass(settings.animation);
        else
            $(item).children(".dropdown, .megamenu").stop(true, true).delay(settings.showDelay).slideDown(settings.showSpeed).addClass(settings.animation);
    }

    // hides a dropdown
    function hideDropdown(item){
        if(settings.effect == "fade")
            $(item).children(".dropdown, .megamenu").stop(true, true).delay(settings.hideDelay).fadeOut(settings.hideSpeed).removeClass(settings.animation);
        else
            $(item).children(".dropdown, .megamenu").stop(true, true).delay(settings.hideDelay).slideUp(settings.hideSpeed).removeClass(settings.animation);
        $(item).children(".dropdown, .megamenu").find(".dropdown, .megamenu").stop(true, true).delay(settings.hideDelay).fadeOut(settings.hideSpeed);
    }

    // landscape mode
    function landscapeMode(){
        $(menu).find(".dropdown, .megamenu").hide(0);
        if(navigator.userAgent.match(/Mobi/i) || window.navigator.msMaxTouchPoints > 0 || settings.trigger == "click"){
            $(".menuzord-menu > li > a, .menuzord-menu ul.dropdown li a").bind("click touchstart", function(e){
                e.stopPropagation(); 
                e.preventDefault();
                $(this).parent("li").siblings("li").find(".dropdown, .megamenu").stop(true, true).fadeOut(300);
                if($(this).siblings(".dropdown, .megamenu").css("display") == "none"){
                    showDropdown($(this).parent("li"));
                    return false; 
                }
                else{
                    hideDropdown($(this).parent("li"));
                }
                window.location.href = $(this).attr("href");
            });
            $(document).bind("click.menu touchstart.menu", function(ev){
                if($(ev.target).closest(".menuzord").length == 0){
                    $(".menuzord-menu").find(".dropdown, .megamenu").fadeOut(300);
                }
            });
        }
        else{
            $(menu_li).bind("mouseenter", function(){
                showDropdown(this);
            }).bind("mouseleave", function(){
                hideDropdown(this);
            });
        }
    }

    // portrait mode
    function portraitMode(){
        $(menu).find(".dropdown, .megamenu").hide(0);
        $(menu).find(".indicator").each(function(){
            if($(this).parent("a").siblings(".dropdown, .megamenu").length > 0){
                $(this).bind("click", function(e){
                    $(menu).scrollTo({top: 45, left: 0}, 600);
                    if($(this).parent().prop("tagName") == "A"){
                        e.preventDefault();
                    }
                    if($(this).parent("a").siblings(".dropdown, .megamenu").css("display") == "none"){
                        $(this).parent("a").siblings(".dropdown, .megamenu").delay(settings.showDelay).slideDown(settings.showSpeed);
                        $(this).parent("a").parent("li").siblings("li").find(".dropdown, .megamenu").slideUp(settings.hideSpeed);
                    }
                    else{
                        $(this).parent("a").siblings(".dropdown, .megamenu").slideUp(settings.hideSpeed);
                    }
                });
            }
        });
    }

    // Fix the submenu on the right side
    function fixSubmenuRight(){
        var submenus = $(menu).children("li").children(".dropdown, .megamenu");
        if($(window).innerWidth() > mobileWidthBase){
            var menu_width = $(menu_container).outerWidth(true);
            for(var i = 0; i < submenus.length; i++){
                if($(submenus[i]).parent("li").position().left + $(submenus[i]).outerWidth() > menu_width){
                    $(submenus[i]).css("right", 0);
                }
                else{
                    if(menu_width == $(submenus[i]).outerWidth() || (menu_width - $(submenus[i]).outerWidth()) < 20){
                        $(submenus[i]).css("left", 0);          
                    }
                    if($(submenus[i]).parent("li").position().left + $(submenus[i]).outerWidth() < menu_width){
                        $(submenus[i]).css("right", "auto");
                    }
                }
            }
        }
    }

    // show the bar to show/hide menu items on mobile
    function showMobileBar(){
        $(menu).hide(0);
        $(showHideButton).show(0).click(function(){
            if($(menu).css("display") == "none")
                $(menu).slideDown(settings.showSpeed);
            else
                $(menu).slideUp(settings.hideSpeed).find(".dropdown, .megamenu").hide(settings.hideSpeed);
        });
    }

    // hide the bar to show/hide menu items on mobile
    function hideMobileBar(){
        $(menu).show(0);
        $(showHideButton).hide(0);
    }

    // unbind events
    function unbindEvents(){
        $(menu_container).find("li, a").unbind();
        $(document).unbind("click.menu touchstart.menu");
    }

    // Menuzord tabs
    function menuTabs(){
        function startTab(tab){
            var TabNavs = $(tab).find(".menuzord-tabs-nav > li");
            var TabContents = $(tab).find(".menuzord-tabs-content");
            $(TabNavs).bind("click touchstart", function(e){
                e.stopPropagation(); 
                e.preventDefault();
                $(TabNavs).removeClass("active");
                $(this).addClass("active");
                $(TabContents).hide(0);
                $(TabContents[$(this).index()]).show(0);
            });
        }
        if($(menu).find(".menuzord-tabs").length > 0){
            var menuTabs = $(menu).find(".menuzord-tabs");
            for(var i = 0; i < menuTabs.length; i++){
                startTab(menuTabs[i]);
            }
        }
    }

    // return window's width
    function windowWidth(){
        return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    }

    // navigation start function
    function startMenu(){
        fixSubmenuRight();
        if(windowWidth() <= mobileWidthBase && bigScreenFlag > mobileWidthBase){
            unbindEvents();
            if(settings.responsive){
                showMobileBar();
                portraitMode();
            }
            else{
                landscapeMode();
            }
        }
        if(windowWidth() > mobileWidthBase && smallScreenFlag <= mobileWidthBase){
            unbindEvents();
            hideMobileBar();
            landscapeMode();
        }
        bigScreenFlag = windowWidth();
        smallScreenFlag = windowWidth();
        menuTabs();
        /* IE8 fix */
        if(/MSIE (\d+\.\d+);/.test(navigator.userAgent) && windowWidth() < mobileWidthBase){
            var ieversion = new Number(RegExp.$1);
            if(ieversion == 8){
                $(showHideButton).hide(0);
                $(menu).show(0);
                unbindEvents();
                landscapeMode();
            }
        }
    }       

    startMenu();
    $(window).resize(function(){
        startMenu();
        fixSubmenuRight();
    });

}
}(jQuery));

最佳答案

早上好

在@yaya pro 的帮助下,我们找到了在某些浏览器中菜单没有响应的原因,与效果和点击有关。

只是因为浏览器提供的一些预设不能正常工作,所以要解决这个问题你只需要创建一个新的预设并正确填写信息,把drp(设备像素比)和浏览器代理。 要填写这些信息,本网站可以帮助您收集这些信息。 enter link description here

再次感谢yaya的帮助和支持。

我希望这个答案可以帮助其他开发者解决进一步的问题。

关于javascript - Web - 菜单不响应 1024-1200 范围内的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57741426/

相关文章:

javascript - 在特定页面上隐藏 div 或 class 元素并在其他页面上显示

javascript - 使用多个复选框过滤具有数据属性的 div

javascript - 访问范围输入值以将其显示在 slider 顶部

javascript - 返回数组的每个元素的多个 HTML 片段

HTML 电子邮件定位

javascript - “the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded” 来自 Android React Native 中的 super 代理

javascript - 正则表达式从头开始删除哈希

javascript - 将多个数组合并为一个数组

javascript - 添加新标记之前删除已添加的标记

jquery - 验证 nicedit 表单文本区域