仅在调整窗口宽度大小时调用 jquery 函数

Call jquery function only when window width gets resized

本文关键字:小时 调用 jquery 函数 调整 窗口      更新时间:2023-09-26

>我有一个函数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);
首先,您将处理程序多次

附加到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);