我正在尝试设置一些计算某些高度和偏移量的Js变量,但我需要在页面加载后执行此操作b / c我已经加载了第三方广告并改变了一切。
所以问题:
我得到的是:
var sidebarHeight = $('.sidebar').height(),
sidebarOffset = $('.sidebar').offset().top;
但是除非我得到这样的话,否则这些都不会正确:
$(window).on('load', function(){
var sidebarHeight = $('.sidebar').height(),
sidebarOffset = $('.sidebar').offset().top;
});
但问题是这些变量不是全局的 - 它们是该函数的本地变量,因此不能被其他函数重用。
那么问题:我如何设置它以便这些变量在window.load上设置,但仍然是全局的并且可被其他函数使用?
答案 0 :(得分:2)
全局变量是不好的做法,应该避免!
对于您的问题,将它们设置为全局很容易。您可以将它们附加到窗口,如下所示:
$(window).on('load', function(){
window.sidebarHeight = $('.sidebar').height();
window.sidebarOffset = $('.sidebar').offset().top;
});
或者,只需在全球范围内声明:
var sidebarHeight, sidebarOffset;
$(window).on('load', function(){
sidebarHeight = $('.sidebar').height();
sidebarOffset = $('.sidebar').offset().top;
});
但是,我强烈建议避免这种情况,并考虑在项目中使用一些名称间距,如下所示:
var MY_PROJET_NAMESPACE = MY_PROJET_NAMESPACE || {};
$(window).on('load', function(){
MY_PROJET_NAMESPACE.sidebarHeight = $('.sidebar').height();
MY_PROJET_NAMESPACE.sidebarOffset = $('.sidebar').offset().top;
});
这将防止全局命名空间污染(在全局范围内只有一个全局变量)
答案 1 :(得分:1)
全球宣布:
var sidebarHeight, sidebarOffset;
在本地设置:
$(window).on('load', function(){
sidebarHeight = $('.sidebar').height();
sidebarOffset = $('.sidebar').offset().top;
});
他们在声明和设置之间不会有价值,因此使用它们的其他代码可能需要考虑到这一点。但是如果你需要它们在全球范围内,那么只需在全局范围内声明它们。
答案 2 :(得分:1)
我有两种方法可以实现这一目标。
第一种方式: 您只需在globalScope上声明变量,但不要指定任何值。然后,在onLoad上为这些值赋值,就像这样:var sidebarHeight;
var sidebarOffset;
$(window).on('load', function(){
sidebarHeight = $('.sidebar').height();
sidebarOffset = $('.sidebar').offset().top;
});
第二种方式(我最喜欢的):
您可以在窗口对象本身上创建一个额外的属性。由于窗口对象引用将是全局的,因此您的额外属性也将是全局的。这样做:
$(window).on('load', function(){
window.sidebarHeight = $('.sidebar').height();
window.sidebarOffset = $('.sidebar').offset().top;
});
无论您何时再次需要该值,都可以阅读window.sidebarHeight
或window.sidebarOffset
。
希望有所帮助。