【发布时间】:2014-12-28 22:41:18
【问题描述】:
我一直在为我设计的一些网站处理响应式菜单时遇到问题。它的 jQuery 部分用于根据窗口宽度显示或隐藏菜单(并隐藏/显示一个栏来切换它)。
在移动浏览器中,切换打开的菜单会在您滚动时再次关闭,但前提是地址栏已通过向下或向上滚动隐藏或显示。这发生在 Android 和 iOS 中。
我确实将其范围缩小到地址栏的出现和消失,因为:
- 它只发生在移动浏览器上。
- 地址栏在页面仍在加载时不会消失(至少在 Opera 中),因此在这种情况下滚动时菜单不会关闭。
- 如果在隐藏地址栏后滚动,菜单不会关闭。
但是,我不知道如何修复它;地址栏影响窗口/页面的高度,而不是宽度,所以我不确定为什么当您向上/向下滚动时菜单会切换。 这种方法是我制作响应式菜单的最简单方法,其中包含当前的设置方式。
这是我正在使用的代码的相关部分:
var winwidth = $(window).width();
$(window).resize(function() {
var newwinwidth = $(window).width();
if(winwidth = newwinwidth && newwinwidth <= 768) {
// if smaller or equal
$('.menu ul').hide();
} else {
// if larger
$('.menu ul').show();
}
}).resize();
这是发生这种情况的网站的现场示例:http://jessicacantlope.com
我已经尝试了几种去抖动方法,看看是否能解决问题(它没有;它只是延迟了操作)并且还搜索了这个网站。我已经包含了应用程序的元元素和其他一些 iOS 特定的东西。
我还研究了完全隐藏地址栏的解决方案,但它们只在某些条件下工作并且依赖于修改系统 UI/UX,这是我不想做的事情。我只是想保持简单。
任何帮助将不胜感激。我更像是一名设计师而不是一名开发人员,我喜欢优雅的解决方案。
编辑,2020 年:五年多后,在实施了一个似乎工作了一段时间但又再次失败的解决方案后,我开始修补并意识到,对于我设计移动菜单和网站的方式,以及一些从那以后我尝试过的事情中,我错误地在我的代码中定位了错误的选择器!我还没有深入思考如何应用第一个建议。它写得并不优雅,所以我不会发布我的最终代码,但我终于得到了工作状态。谢谢大家!
【问题讨论】:
标签: android jquery ios mobile menu