首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未绘制子菜单(Sidr)

未绘制子菜单(Sidr)
EN

Stack Overflow用户
提问于 2016-08-31 01:27:40
回答 1查看 228关注 0票数 0

我正在使用Wordpress中的Sidr菜单插件。Sidr在其移动布局中有几个问题,我使用一点javascript修复了这个问题。

代码语言:javascript
复制
<script type="text/javascript">
    jQuery( window ).load(function() {
        if(jQuery("#sidr-main").length !== 0) {        
                jQuery(".sidr-class-sub-menu").each(function() {
                jQuery(this).hide();
            });
            jQuery(".sidr-class-menu-item-has-children > a").each(function() {
                if(jQuery(this).children().length == 0) {
                    jQuery(this).append('<span class="sidr-class-menu_arrow"><i class="fa fa-angle-right"></i></span>');
                }
            });
                jQuery( ".fa-angle-down" ).each(function() {
                    jQuery(this).removeClass("fa-angle-down");
                jQuery(this).addClass("fa-angle-right");
                });
            jQuery(".sidr-class-sub-menu").hide(); 
            jQuery(".sidr-class-menu_arrow").toggle(function() {
                var id1 = jQuery(this).parent().parent().attr("id");
                jQuery(this).children().removeClass("fa-angle-right");
                jQuery(this).children().addClass("fa-angle-down");
                jQuery("#" + id1 + " ul.sidr-class-sub-menu").show();

                }, function() {
                    var id1= jQuery( this ).parent().parent().attr("id");
                    jQuery("#" + id1 + " ul.sidr-class-sub-menu").hide();
                    jQuery(this).children().removeClass("fa-angle-down");
                jQuery(this).children().addClass("fa-angle-right");
                });
        }
    });
    </script>

这段代码隐藏了侧边栏上的子菜单,并在开始时添加了一个可单击的箭头,然后使用jQuery的切换函数来更改箭头的方向,并显示或隐藏子菜单。在Chrome (移动端和台式机)和Firefox上,这是完美的。

在Safari (移动端和台式机)和默认的android浏览器上,这不起作用。hide()和show()方法可以很好地工作,但不会重新绘制任何内容。菜单将展开以允许显示子菜单,但不显示子菜单(和标题)。根据每个浏览器中的开发人员工具,display根据需要设置为block或none。

我听说Safari可能有问题,不能重新绘制东西(因为它是Webkit,但Chrome也是,所以...)。当然,解决方案是使用hide()和show()来强制重绘。在我的例子中,这显然行不通: hide()和show()是问题所在。我试着不使用jQuery,还试着添加和删除一个样式为不显示的"hideThis“类。唯一略微起作用的是使用hide(2000),但这只适用于您展开的第一个菜单,并不是每次都起作用。

我已经在两部iPhones和两部安卓手机和一台运行Safari的Windows桌面上进行了测试,所有这些都有完全相同的反应。

您可以在http://test.langcliffeavoca.church上查看此内容

EDIT: Hide()和show()绝对没有区别-我已经尝试了Hide&showing()、this.parent()和this.children(),并且多次尝试这样做,但都没有用。通过调试,我知道事件被正确地触发了。我还知道这些元素实际上是显示和隐藏的,因为我可以在浏览器中关闭并重新打开侧边菜单,一切都会正确显示。它只是没有被重新绘制。这可以在Chrome、Firefox、Edge和Internet Explorer上正常工作,但不能在Safari或原生Android上工作。

EN

回答 1

Stack Overflow用户

发布于 2016-09-21 23:07:39

我找到的唯一解决办法就是隐藏并显示#sidr-main (整个侧边栏),延迟10ms。这会引起一次闪光,但并不是很明显。我用this user agent detection code来查看浏览器是safari,还是三星、宏达电、索尼或LG的默认浏览器。这让我可以避免隐藏和显示整个侧边栏,除非确实有必要。我还必须修复代码中的其他一些东西,留给我的是:

代码语言:javascript
复制
    var 
        ua = navigator.userAgent,
        browser = /Edge\/\d+/.test(ua) ? 'ed' : /MSIE 9/.test(ua) ? 'ie9' : /MSIE 10/.test(ua) ? 'ie10' : /MSIE 11/.test(ua) ? 'ie11' : /MSIE\s\d/.test(ua) ? 'ie?' : /rv\:11/.test(ua) ? 'ie11' : /Firefox\W\d/.test(ua) ? 'ff' : /Chrom(e|ium)\W\d|CriOS\W\d/.test(ua) ? 'gc' : /\bSafari\W\d/.test(ua) ? 'sa' : /\bOpera\W\d/.test(ua) ? 'op' : /\bOPR\W\d/i.test(ua) ? 'op' : typeof MSPointerEvent !== 'undefined' ? 'ie?' : '',
        os = /Windows NT 10/.test(ua) ? "win10" : /Windows NT 6\.0/.test(ua) ? "winvista" : /Windows NT 6\.1/.test(ua) ? "win7" : /Windows NT 6\.\d/.test(ua) ? "win8" : /Windows NT 5\.1/.test(ua) ? "winxp" : /Windows NT [1-5]\./.test(ua) ? "winnt" : /Mac/.test(ua) ? "mac" : /Linux/.test(ua) ? "linux" : /X11/.test(ua) ? "nix" : "",
        touch = 'ontouchstart' in document.documentElement,
        mobile = /IEMobile|Windows Phone|Lumia/i.test(ua) ? 'w' : /iPhone|iP[oa]d/.test(ua) ? 'i' : /Android/.test(ua) ? 'a' : /BlackBerry|PlayBook|BB10/.test
        //window.alert(ua + " ||| " + browser + " ||| " + os);
    var fix = 0;
    if ((ua.indexOf("SamsungBrowser") > -1) || (ua.indexOf("HTC") > -1) || (ua.indexOf("LG-") > -1) || (ua.indexOf("Sony") > -1)) {var fix = 1}
    if (browser == "sa") {var fix = 1}

    jQuery( window ).load(function() {
        if (jQuery("#sidr-main").length !== 0) {      
                jQuery(".sidr-class-sub-menu").each(function() {
                    jQuery(this).hide();
                });
                jQuery(".sidr-class-menu-item-has-children > a").each(function() {
                    if(jQuery(this).children().length == 0) {
                        jQuery(this).append('<span class="sidr-class-menu_arrow"><i class="fa fa-angle-right"></i></span>');
                    }
                });
                jQuery( ".fa-angle-down" ).each(function() {
                    jQuery(this).removeClass("fa-angle-down");
                    jQuery(this).addClass("fa-angle-right");
                });
            jQuery(".sidr-class-sub-menu").hide();
            jQuery(".sidr-class-menu_arrow").click(function(event) {
                event.preventDefault();
                event.stopPropagation();
                if (jQuery(this).children().hasClass("fa-angle-right")) {
                    var id1 = jQuery(this).parent().parent().attr("id");
                    jQuery(this).children().removeClass("fa-angle-right");
                    jQuery(this).children().addClass("fa-angle-down");
                    jQuery("#" + id1 + " ul.sidr-class-sub-menu").show(10);
                    jQuery(this).parent().parent().children(".sidr-class-menu-item-has-children ul").each(function() {
                        jQuery(this).find("li ul").hide();
                    });
                    if (fix==1) {
                        jQuery("#sidr-main").hide(10);
                        jQuery("#sidr-main").show(10);
                    }
                } else {
                    var id1= jQuery( this ).parent().parent().attr("id");
                    jQuery("#" + id1 + " ul.sidr-class-sub-menu").hide(10);
                    jQuery(this).children().removeClass("fa-angle-down");
                    jQuery(this).children().addClass("fa-angle-right");
                    jQuery("#sidr-main").hide(10);
                    jQuery("#sidr-main").show(10);
                }
            });
        }
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39233625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档