1

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

我尝试过将其包裹起来,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');      
        });
    }
4

3 回答 3

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');
        }

});
于 2013-02-04T16:57:02.100 回答
1

您应该改用 css 媒体查询:

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

或者包括条件样式表:

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

这是一篇不使用响应式设计的好文章

于 2013-02-04T16:56:17.960 回答
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()并不总是有效,因为它不一定会在您调整大小时进行检查。

于 2013-02-04T16:55:41.383 回答