0

我想在用户访问 url 中检查窗口的宽度,如果浏览器调整大小,然后再做一次。


Q1。如果我只在其中调用函数setcolamt()resize()它不会做任何colmat与以前相同的值,我不知道为什么?我必须再次提取所有代码,就像commentthencolmat将发生变化一样。

Q2。为什么alert()resize()里面会弹出3次?

任何建议将不胜感激。

jsfiddle

var colamt=0;
var winwid = $(window).width();
function setcolamt(){        
    if(winwid > 800){
        colamt = 8;
    }
    else{
        colamt = 4;
    }
};
setcolamt();
alert(colamt);

$(window).resize(function(){
    //var colamt=0;
    //var winwid = $(window).width();
    //function setcolamt(){        
        //if(winwid > 800){
        //    colamt = 8;
        //}
        //else{
        //    colamt = 4;
        //}
    //};
    setcolamt();
    alert(colamt);
});

​</p>

4

4 回答 4

2

搬进。var winwid = $(window).width();_ setcolamt()但请注意alert()在检查前删除。它可能挂了。console.log比它好。

于 2012-11-28T03:05:01.857 回答
1

初始调用后宽度不会更新,因为该函数setcolamt()不会修改winwid.

var colamt=0;
var winwid = $(window).width();

function setcolamt(){        
    // Get the new winwid
    winwid = $(window).width();
    if(winwid > 800){
        colamt = 8;
    }
    else{
        colamt = 4;
    }
};

除非您打算使用winwidoutside setcolamt(),否则没有必要在全局范围内声明它。相反,您可以在函数中声明和使用它

function setcolamt(){        
    // declare winwid here with var, not outside.
    // and no need to call $(window).width() outside...
    var winwid = $(window).width();
    if(winwid > 800){
        colamt = 8;
    }
    else{
        colamt = 4;
    }
};

这是更新的jsfiddle(使用console.log()而不是烦人alert()

于 2012-11-28T03:04:40.827 回答
1
  1. var winwid = $(window).width(); 在 setcolamt() 里面;
  2. 不关心有多少警报,因为调整大小会触发多次。请改用 console.log()。
于 2012-11-28T03:09:05.373 回答
0

var winwid = $(window).width();只会设置一次,因为它是当前编写的。在调整大小事件中,您需要注意窗口的更新大小。一种快速的方法是将 移到var winwid = $(window).width()函数中。另一个是从传递给 .resize() 回调函数的事件中获取新宽度。

于 2012-11-28T03:05:21.967 回答