javascript - 最初找到页面宽度,并在调整浏览器大小后检查它

标签 javascript jquery window-resize

我可以使用这段代码,但它对我来说似乎很笨拙,有没有办法简化?它的要点是我在页面加载时检查页面宽度并显示或隐藏基于它的 div(基于浏览器是否比 480 像素更宽或更窄)。然后,如果用户调整浏览器窗口的大小,我会再次检查宽度并显示/隐藏适当的 div。无论如何,这可以用 jquery 或只是 js 来简化吗?

function pageWidth() {
        return window.innerWidth != null? window.innerWidth: document.body != null? document.body.clientWidth:null;
    }
    //Show/hide the correct div when the page loads
    if (pageWidth() >= 480) {
        $(".siteSearchDropdown").css("display", "none");
        $(".siteSearchSelect").css("display", "block");
    }
    if (pageWidth() < 480) {
        $(".siteSearchDropdown").css("display", "block");
        $(".siteSearchSelect").css("display", "none");
    }
    // Show/hide the correct dropdown when the browser window is resized
    $(window).resize(function() {
        if (pageWidth() >= 480) {
            $(".siteSearchDropdown").css("display", "none");
            $(".siteSearchSelect").css("display", "block");
        }
        if (pageWidth() < 480) {
            $(".siteSearchDropdown").css("display", "block");
            $(".siteSearchSelect").css("display", "none");
        }
    });

最佳答案

与其编写两次代码,不如在 window.resize 事件处理程序中编写一次,然后在 window 上触发一个 resize 事件元素:

$(window).resize(function() {
    if (pageWidth() >= 480) {
        $(".siteSearchDropdown").css("display", "none");
        $(".siteSearchSelect").css("display", "block");
    }
    if (pageWidth() < 480) {
        $(".siteSearchDropdown").css("display", "block");
        $(".siteSearchSelect").css("display", "none");
    }
}).trigger('resize');

此外,由于这段代码会在有人调整浏览器大小时运行多次,因此您应该通过缓存选择器来优化您的代码:

var $siteSearchDrioopdown = $(".siteSearchDropdown"),
    $siteSearchSelect     = $(".siteSearchSelect");
$(window).resize(function() {
    if (pageWidth() >= 480) {
        $siteSearchDrioopdown.css("display", "none");
        $siteSearchSelect.css("display", "block");
    }
    if (pageWidth() < 480) {
        $siteSearchDrioopdown.css("display", "block");
        $siteSearchSelect.css("display", "none");
    }
}).trigger('resize');

注意:我提到过在调整浏览器大小时,resize 事件处理程序代码如何运行多次。要亲自测试,只需将此代码添加到页面并观察您的开发者控制台运行:

$(window).resize(function (e) {
    console.log(e);
});

再次查看代码后,您可以使用 if/else 语句而不是运行两次 pageWidth() 函数来进一步优化:

var $siteSearchDrioopdown = $(".siteSearchDropdown"),
    $siteSearchSelect     = $(".siteSearchSelect");
$(window).resize(function() {
    if (pageWidth() >= 480) {
        $siteSearchDrioopdown.css("display", "none");
        $siteSearchSelect.css("display", "block");
    } else {//notice the change in structure so the `pageWidth()` function is only called once
        $siteSearchDrioopdown.css("display", "block");
        $siteSearchSelect.css("display", "none");
    }
}).trigger('resize');

关于javascript - 最初找到页面宽度,并在调整浏览器大小后检查它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480000/

相关文章:

javascript - 如何根据三个键对数组对象进行分组

javascript - 如何使此 slider 自动

jquery 检测窗口大小调整

javascript - Angular View 不更新新数据

javascript - 如何获取条形图宽度(以像素为单位)

javascript - Spring MVC,HashMap作为模型-如何使用javascript变量作为jsp中的键来获取值

来自不同域的 url 的窗口调整大小时,javascript 访问被拒绝

javascript - jQuery 分离和重新附加元素的更简单方法

php - Web 开发中的 Push 状态

javascript - 在窗口调整大小时移动内容