实时浏览器大小检测

时间:2013-02-04 16:51:06

标签: javascript jquery css responsive-design

此代码仅根据加载时浏览器的大小而有效,只是想知道我可以实现什么,以获取当前浏览器大小并根据当前信息工作。

我已经尝试将它包装在resize()中,但它会导致它表现得很奇怪,即切换连续打开和关闭,或者在缩小的浏览器中加载它根本不起作用。

它是一个响应式网站,其中页脚菜单只是大屏幕上的静态链接,但在小屏幕上变为下拉菜单。

    var myWidth = 0, myHeight = 0;

    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        myWidth = window.innerWidth;
        myHeight = window.innerHeight;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight;
    }   

    if(myWidth < 980) {
        $("#footer h3").click(function () {
                $(this).toggleClass("active");
                $(this).parent().find("ul").slideToggle('medium');      
        });
    }

3 个答案:

答案 0 :(得分:1)

您应该使用css媒体查询:

@media only screen and (max-device-width: 980px) {
   // css goes here...   
}

OR包括条件样式表:

<link rel="stylesheet" type="text/css" media="only screen and (max-device-width: 480px)" href="small-device.css" />

Here is a great article disusing responsive design

答案 1 :(得分:1)

var myWidth = 0, myHeight = 0;


function getSize(){

    if( typeof( window.innerWidth ) == 'number' ) {
        //Non-IE
        myWidth = window.innerWidth;
        myHeight = window.innerHeight;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
        //IE 6+ in 'standards compliant mode'
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight;
    }

}

getSize(); // run first time

$(window).resize(function(){
  getSize(); // do it on resize
});


$("#footer h3").click(function () {

        getSize();  // not needed but good to have

        if(myWidth < 980) {
            $(this).toggleClass("active");
            $(this).parent().find("ul").slideToggle('medium');
        }

});

答案 2 :(得分:0)

尝试这样的事情:

var waitForFinalEvent = (function () {
    var timers = {};
    return function (callback, ms, uniqueId) {
        if (!uniqueId) uniqueId = "Don't call this twice";
        if (timers[uniqueId]) clearTimeout (timers[uniqueId]);
        timers[uniqueId] = setTimeout(callback, ms);
    };
})();

$(window).resize(function(){
    waitForFinalEvent(function(){
        // put all your code here 
    }, 20, "resize"); // replace 20 with every milliseconds to execute during
                      // resize
})

每次窗口调整大小时,您放入的代码都将执行,只使用resize()并不总是有效,因为在调整大小时它不一定会检查。