WordpressでSidr Menuプラグインを使用しています。 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(モバイルとデスクトップ)とデフォルトのアンドロイドブラウザでは、これは動作しません。 hide()メソッドとshow()メソッドは完全に動作しますが、何も再描画されません。メニューが展開され、サブメニューが表示されますが、サブメニュー(および見出し)は表示されません。すべてのブラウザの開発ツールによれば、表示はブロックされるように設定されているか、適切でないものに設定されています。
Safariで再描画されない問題があると聞いていました(WebkitだからChromeはそうです...)。解決策はもちろん、hide()とshow()を使用して強制的に再描画を行うことです。私の場合、これは明らかにうまくいきません:hide()とshow()が問題です。私はjQueryを使用しないようにしましたが、表示されないようにスタイルされた「hideThis」クラスの追加と削除も試みました。わずかに動作するのは、hide(2000)を使用することだけですが、展開する最初のメニューでのみ機能し、毎回は機能しません。
私はこれを2台のiPhoneと2台のAndroid端末とSafariを実行するWindowsデスクトップでテストしましたが、すべて同じ反応があります。
あなたが http://test.langcliffeavoca.churchEDITでこれを見てとることができ
: 隠す()とshow()確かに違いはありません - 私は(これを示す&を隠蔽しようとした)、this.parent( )、this.children()、それを何度もやってみましたが何も助けません。デバッグを通じて、イベントが正常に実行されていることがわかります。ブラウザでサイドメニューを閉じて再度開くことができ、すべてが正しく表示されるため、要素が実際に表示され、隠されていることも知っています。それは再描画されていないだけです。これはChrome、Firefox、Edge、Internet Explorerでは正しく動作しますが、SafariやネイティブAndroidでは正しく動作しません。