在resize()中检查窗口的宽度函数

时间:2012-11-28 02:47:56

标签: javascript jquery

我想在用户访问网址中检查窗口的宽度,如果浏览器调整大小,则再次执行。


Q1。如果我只调用setcolamt()中的函数resize(),它将不会执行任何colmat与以前相同的值,我不知道为什么?我必须再次提取所有代码,就像comment然后colmat将会更改一样。

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;
    }
};

除非您打算在winwid之外使用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;
    }
};

Here is the updated jsfiddle(使用console.log()代替恼人的alert()

答案 2 :(得分:1)

  1. put var winwid = $(window).width(); 在setcolamt();
  2. 不关心多少警报,因为调整大小会多次触发。请改用console.log()。

答案 3 :(得分:0)

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