2016-08-30 2 views
0

Я использую плагин Sidr Menu в Wordpress. У Sidr есть несколько проблем в своем мобильном макете, который я исправил, используя немного javascript.Подменю не нарисовано (Sidr)

<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() работают отлично, но ничего не перерисовывается. Меню расширяется, чтобы подменю отображалось, но подменю (и заголовок) не отображаются. В соответствии с инструментами разработчика в каждом браузере, дисплей настроен на блокировку или нет, если это необходимо.

Я слышал, что с Safari может возникнуть проблема не перерисовывать вещи (так как это Webkit, но Chrome тоже ...). Разумеется, решение состоит в том, чтобы использовать hide() и show(), чтобы заставить перерисовать. В моем случае это явно не сработает: hide() и show() - это проблемы. Я пробовал не использовать jQuery, и я также попытался добавить и удалить класс «hideThis», который не предназначен для отображения. Единственное, что незначительно работает, это использование hide (2000), но это работает только для первого меню, которое вы расширяете, и не работает каждый раз.

Я тестировал это на двух iPhone и двух телефонах Android и на рабочем столе Windows, работающем под Safari, и все они имеют одинаковые реакции.

Вы посмотрите на это в http://test.langcliffeavoca.church

EDIT можно: Скрыть() и шоу() определенно не делают разницы - я пытался скрываться & показывать это(), this.parent () и this.children(), и попытался сделать это несколько раз, и ничего не помогает. Благодаря отладке я знаю, что события должным образом запущены. Я также знаю, что элементы фактически отображаются и скрыты, потому что я могу закрыть и снова открыть боковое меню в браузере, и все выглядит правильно. Это просто не перерисовывается. Это корректно работает в Chrome, Firefox, Edge и Internet Explorer, но не на Safari или на родном Android.

ответ

0

Единственное обходное решение, которое я нашел для этого, - это скрыть и показать # sidr-main (всю боковую панель) с задержкой 10 мс. Это вызывает вспышку, но это не очень заметно. Я использовал this user agent detection code, чтобы узнать, является ли браузер сафари или браузером по умолчанию от Samsung, HTC, Sony или LG. Это позволяет мне исключить скрытие и отображение всей боковой панели, если это действительно не необходимо. Я также должен был исправить некоторые другие вещи в коде, оставив мне следующее:

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); 
       } 
      }); 
     } 
    }); 
Смежные вопросы