gpt4 book ai didi

javascript - 定位 jQuery 下拉菜单,使其完全显示在移动设备的屏幕上

转载 作者:行者123 更新时间:2023-11-29 10:21:33 25 4
gpt4 key购买 nike

我有一个基本的 jQuery 下拉菜单,我正在移动设备上测试它,特别是手机。

我遇到的一个问题是右侧的子菜单有时会超出屏幕边缘,因为一个或多个项目中的文本太长。用户当然可以稍微向右滚动,但这不是一个很好的解决方案。还有一个类似的问题here ,但我无法得到建议的答案(而且我还在摸索,因为我对 JS/jQuery 还是全新的)。

一般的想法似乎是获取当前子菜单的左侧位置+宽度(确保首先显示它们,然后再次隐藏它们或显示它们并在用户点击菜单时移动它们)并查看该值是否大于屏幕宽度。如果是,则应将其向左移动差值。但是,我的尝试似乎对元素没有任何作用,而且菜单部分显示在屏幕外。目前,我有这个(在 body 加载后运行):

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;
}

最佳答案

我终于得到了以下的工作:

function adjustSubMenus()
{
var menus = $('#navbar').find('.subMenu');
menus.each(function(){
$(this).css("left","");
adjustSingleMenu($(this))
} );
}
function adjustSingleMenu(element)
{
element.show();
var thisMenuWidth = element.outerWidth();
var thisMenuPos = element.offset();
var diff = (thisMenuWidth + thisMenuPos.left) - window.outerWidth;
if(diff > 0) {
element.css("left", function() { return thisMenuPos.left - diff; });
}
element.hide();
}
$('body').ready(function() {
$(window).resize(adjustSubMenus());
if(window.outerWidth <= 720) {
$('html').mousedown(function() {
$('#navbar').find('.subMenu').each(function(index) {
if($(this).is(":visible") ) {
$(this).css("left","");
$(this).hide();
}
} );
});

$('#navbar').mousedown(function(event) {
event.stopPropagation();
});

$('.dropdown').mousedown(function() {
var ele = $(this).find('.subMenu');
$('#navbar').find('.subMenu').each(function(index) {
if(!$(this).is(ele) && $(this).is(":visible") ) {
$(this).css("left","");
$(this).hide();
}
} );
if(ele.is(":visible")) {
ele.css("left","");
ele.hide();
}
else {
adjustSingleMenu(ele);
ele.show();
}
});
}
else
{
$('.dropdown').hover(
function() { $(this).find('.subMenu').stop(true,true).slideDown("fast"); },
function() { $(this).find('.subMenu').stop(true,true).hide(); }
);
}
});

唯一的小警告是,如果您在更改手机方向时打开了菜单,则该菜单可能会出现在屏幕之外。关闭并重新打开菜单将解决此问题。其他一切都完美无缺。

关于javascript - 定位 jQuery 下拉菜单,使其完全显示在移动设备的屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10824824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com