我有一个函数responsive
,可以改变我网站上某些元素的行为,包括隐藏弹出窗口等。我在两种情况下称之为:
$(document).ready(responsive);
$(window).resize(responsive);
问题出现在android chrome上,因为虚拟键盘实际上会改变屏幕的高度,并触发responsive
函数,这会关闭我的弹出窗口(其中一些有文本字段,无法输入)。
如何防止这种情况发生?我在某处读到了一个很好的观点,即android虚拟键盘只会改变屏幕的高度而不是宽度,所以我认为在调整大小之前和之后比较宽度是个好主意。所以我创建了这个函数来比较之前和之后的宽度,如果宽度不同则运行resize()
,但它不能按预期工作,并且控制台日志显示不同的文档宽度,即使我只改变了屏幕的高度(使用chrome开发工具)。
知道出了什么问题,或者如何防止在高度变化时启动功能responsive
?
function resizeWidth() {
var existingWidth = $(document).width();
$(window).resize(function() {
var newWidth = $(document).width();
if (existingWidth != newWidth) {
$(window).resize(responsive);
console.log(existingWidth);
console.log(newWidth);
};
});
};
$(window).resize(resizeWidth);
答案 0 :(得分:1)
首先,您要多次将处理程序附加到resize
事件。一个加载,然后另一个每时间调整大小并调用resizeWidth
。您应该删除该函数中的处理程序。另外,我想您只想调用responsive()
函数,而不是在宽度更改时附加另一个调整大小处理程序。
您遇到的主要问题是existingWidth
的范围不够低,无法在多个事件中看到它。你可以把它变成全球性的,虽然这通常被认为是不好的做法。相反,您可以使用data
属性,如下所示:
function resizeWidth() {
var existingWidth = $(document).data('resize-width');
var newWidth = $(document).width();
if (existingWidth != newWidth) {
responsive();
$(document).data('resize-width', newWidth);
};
};
$(window).resize(resizeWidth);