【发布时间】:2018-02-21 11:16:04
【问题描述】:
我在 JS 中有一个函数,我在调整窗口大小时调用它。在移动平板电脑用例中,将方向从横向更改为纵向,反之亦然会更改窗口尺寸。不仅如此,它还有助于在桌面浏览器中进行测试。
因此,该函数不应仅应用于文档加载,而应应用于调整窗口大小。目前,窗口调整大小重新加载不起作用,我不知道为什么。任何建议都会有所帮助。
您可以在此处查看示例:
// Mobile Menu Function
function mobMenu() {
var $window = $(window);
var $html = $('html');
var $dropdown = $('.dropdown-nav > a');
var $allDropdown = $('.dropdown-nav');
var $hamburger = $('.hamburger > a');
var $hamburgerInPage = $('.hamburger-in-page > a');
var $menu = $('.cpi-main-nav');
var $menuInPage = $('.in-page-nav nav');
var $isiOS = navigator.userAgent.match(/iPad|iPhone|iPod/i) != null;
if ($isiOS) {
$(document).on('click touchend', function () {
$dropdown.parent().removeClass('active-hit');
});
$dropdown.on('click', function(e){
e.preventDefault();
e.stopPropagation();
});
$html.addClass('mobile-view');
} else {
$html.removeClass('mobile-view');
}
if ($window.width() < 900) {
$hamburger.on('click', function(e){
$menu.toggleClass('open-close-nav');
});
$hamburgerInPage.on('click', function(e){
$menuInPage.toggleClass('open-close-in-page-nav');
});
// On Click Drop Down
$dropdown.on('click', function(e){
// Close Everything but the current Drop Down
$allDropdown.not($(this).parent()).removeClass('active-hit');
//if current is open then close
if ($(this).parent().hasClass('active-hit')) {
$(this).parent().removeClass('active-hit');
}
//if current is closed then open
if (!$(this).parent().hasClass('active-hit')) {
$(this).parent().addClass('active-hit');
}
e.preventDefault();
e.stopPropagation();
});
$html.addClass('mobile-view');
} else {
$html.removeClass('mobile-view');
$menu.removeClass('open-close-nav');
$dropdown.parent().removeClass('active-hit');
}
}
$(window).resize(function () {
mobMenu();
});
$(document).ready(function() {
mobMenu();
});
【问题讨论】:
-
某些设备(浏览器)在方向改变时不会触发
resize,您还需要添加window.addEventListener("orientationchange", mobMenu);。顺便说一句,这里不需要匿名函数,你可以做$(window).resize(mobMenu); -
谢谢,但您知道为什么 window.resize 有时无法在桌面上运行吗?
-
同样的事情,除非它来自代码中的错误(这似乎不是)。浏览器实现事件的方式不同,例如,有些会在调整大小期间重复触发它,有些只在调整大小结束时触发,等等
-
好的,谢谢,现在似乎在 chrome 中工作。你想写一个回复以便我接受答案吗?
-
整个逻辑一开始是相当虚假的......你在每次对
mobMenu的新调用中继续在这里堆积事件处理程序。恕我直言,根据窗口宽度分配此类事件处理程序几乎没有意义。为菜单按钮分配一个适当的点击处理程序,once,并且在任何条件或额外检查之外。由于您将在不合适的情况下隐藏该按钮,因此在这种情况下任何用户都不会单击它。
标签: javascript jquery