基本的なjQueryドロップダウンメニューがあり、モバイルデバイス、特に電話でテストしています。
私が遭遇した問題の1つは、1つ以上の項目のテキストが長すぎるために、右側のサブメニューが画面の端から外れることがあるということです。もちろん、ユーザーは少し右にスクロールできますが、それは優れたソリューションではありません。ここにも同様の質問がありますが、提案された回答を機能させることができませんでした(さらに、JS / jQueryにまったく慣れていないので、いじくり回しています)。
一般的な考え方は、現在のサブメニューの左の位置と幅を取得し(最初に表示されていることを確認してから、もう一度非表示にするか、ユーザーがメニューをタップしたときに表示してシフトする)、その値がより大きいかどうかを確認することです。画面の幅。もしそうなら、それは違いによって左にシフトされるべきです。しかし、私の試みは要素に何もしていないようで、メニューは部分的に画面外に表示され続けます。現在、私はこれを持っています(体がロードされた後に実行されます):
var menus = $('#navbar').find('.subMenu');
menus.show();
menus.each(function(index) {
var offsetMenu = $(this).offset();
var diff = screen.width - ($(this).outerWidth + offsetMenu.left);
if(diff < 0) {
$(this).offset({top:offsetMenu.top, left:offsetMenu + diff});
}
});
menus.hide();
jQueryのバージョンは1.7.2で、HTML構造は次のとおりです(簡略化されたバージョン)。
<div id="navbar">
<ul>
<li class="dropdown"><a href="#">Link A</a></li>
<li class="dropdown"><a href="#">Link B</a>
<ul class="subMenu">
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
</ul>
</li>
</ul>
</div>
どうすればこれを機能させることができますか?
編集:関連するCSSもここにあります。
#navbar ul.subMenu {
position:absolute;
display:none;
background-color:#FFAF1E;
}
#navbar ul.subMenu li {
clear:both;
}
#navbar a {
text-decoration:none;
color:#0C1F6E;
display:block;
padding-right:10px;
padding-left:10px;
}