我有一个粘性标题,当用户向下滚动时会停留在页面顶部。
如果用户滚过某个点,我想创建一个隐藏标题菜单部分的脚本。如果用户点击屏幕顶部,我还想重新显示菜单,因此我编写了这个脚本:
var lastmargintop = 0;
$(document).scroll(function() {
var margintop = $('#stickyheader').css('marginTop');
var margintop = parseInt(margintop, 10);
if(margintop > 10){
$('#menu').hide('fast');
}
if (lastmargintop < 10){
$('#menu').show('fast');
}
console.log(lastmargintop);
var lastmargintop = margintop;
});
但变量lastmargintop
显示为undefined
。我不确定为什么会这样。谁能告诉我为什么?
答案 0 :(得分:4)
原因是JavaScript变量声明被挂起。因此,即使var lastmargintop
低于console.log()
,它的行为就像声明部分在上面一样。
所以这......
var lastmargintop = 0;
$(document).scroll(function() {
// ...removed code...
console.log(lastmargintop); // expecting 0? you'll get undefined
var lastmargintop = margintop;
});
实际上解释为:
var lastmargintop = 0;
$(document).scroll(function() {
var lastmargintop;
// ...removed code...
console.log(lastmargintop); // Probably clearer now why you get undefined
lastmargintop = margintop;
});
请注意var lastmargintop
已移至函数顶部。这与显式变量声明隐式发生。
答案 1 :(得分:0)
首先,如果您希望将新值lastmargintop
打印到控制台,而不是之后重新定义它。另外,我不会像这样定义margintop
两次,然后在定义中调用它。我会在那里使用一个新的变量名。