2011-07-06 37 views
3

我想创建一个jquery函数,可以调用准备就绪以及何时浏览器窗口调整大小。重置变量浏览器使用jquery调整大小后

jQuery(document).ready(function($) { 

function setWidth() { 
    var windowWidth = $(window).width(); 
    var boxWidth = $('#addbox').width(); 
    var paddingWidth = (windowWidth - boxWidth)/2; 
}; 

$(setWidth); 

$(window).resize(setWidth); 

$(".scroll").click(function(event){  
    event.preventDefault(); 
    $('html,body').animate({scrollLeft:$(this.hash).offset().left-paddingWidth}, 750); 
}); 

});

但该代码似乎并没有工作,萤火虫说paddingWidth没有定义。我究竟做错了什么?

+0

在什么范围,你想访问'paddingWidth'?你声明它的方式,它只在函数'setWidth'中作用域。 – FishBasketGordo

+0

对不起,我没有包含所有的代码。解决这个问题,你可以看到整个范围。 – bswinnerton

回答

5

变量的范围在其中定义(使用var)。在你的情况下,这意味着它们只在setWidth内定义,并在每次执行该方法时重新初始化。

您应该将它们移动到包含范围中,以便后代作用域中的函数可以访问它们的值。

jQuery(document).ready(function ($) { 
    var windowWidth, boxWidth, paddingWidth; // declare variables in this scope 

    function setWidth() { 
     windowWidth = $(window).width(); // set variables in this scope 
     boxWidth = $('#addbox').width(); 
     paddingWidth = (windowWidth - boxWidth)/2; 
    }; 

    setWidth(); // just call the function 

    $(window).resize(setWidth); 

    $(".scroll").click(function (event) { 
     event.preventDefault(); 
     $('html,body').animate({ 
      scrollLeft: $(this.hash).offset().left - paddingWidth 
     }, 750); 
    }); 
}); 

注意$(setWidth)是奇数呼叫,和相对昂贵的。它说“文档准备就绪时请致电setWidth”。由于您处于jQuery(document).ready处理程序中,因此可以确定这是真的。您可以使用setWidth()执行该功能。

+0

非常感谢!那很完美。 – bswinnerton

1

试试这个

jQuery(document).ready(function($) { 

var paddingWidth = 0; 

function setWidth() { 
    var windowWidth = $(window).width(); 
    var boxWidth = $('#addbox').width(); 
    paddingWidth = (windowWidth - boxWidth)/2; 
}; 

$(setWidth); 

$(window).resize(setWidth); 

$(".scroll").click(function(event){  
    event.preventDefault(); 
    $('html,body').animate({scrollLeft:$(this.hash).offset().left-paddingWidth}, 750); 
}); 
相关问题