不能弄清楚我在这里做错了什么。
我使用jquery更新屏幕调整大小的变量。变量的目的是在CSS命中媒体查询768px时修复scrollTop
函数的过冲。
以下是调整大小函数的代码:
$(window).resize(function(){
if (window.matchMedia('(max-width: 768px)').matches) {
var scrollovershoot = 40;console.log(scrollovershoot);
} else {
var scrollovershoot = 0;console.log(scrollovershoot);
}
});
现在上面的函数完全正常工作,因为当屏幕大小达到768或更低时,它会记录正确的scrollovershoot
变量,即值40.变量似乎没有更新在我的另一个scrollTop
函数中(它没有更新scrollTop
偏移量)。以下是滚动功能的代码:
$(".fixed-navigation-follow li a, .see-next a, .more-info-cta, .flipper-container a, #main-atf-cta").click(function (){
var scrollmeto = $(this).attr("href");
$('html, body').animate({
scrollTop: $(scrollmeto).offset().top - scrollovershoot
}, 1000);
return false;
});
当我调整屏幕大小时,我从第一个显示正确值的函数中获取自动控制台日志记录但是当我停止调整大小并在控制台中输入console.log(scrollovershoot);
时,我得到scrollovershoot
未定义的消息。这是为什么?
答案 0 :(得分:3)
scrollovershoot
需要是一个全局变量。您正在功能级别定义它。
更改关键字var
以防止在您的功能范围内定义该关键字,并将其定义在您的代码段上方以使其成为全局。
或者为了更安全,您可以通过将其分配给全局对象window
来使其更加全球化。
window.scrollovershoot = 0;
$(window).resize(function(){
if (window.matchMedia('(max-width: 768px)').matches) {
window.scrollovershoot = 40;console.log(window.scrollovershoot);
} else {
window.scrollovershoot = 0;console.log(window.scrollovershoot);
}
});
在你的jQuery中:
$(".fixed-navigation-follow li a, .see-next a, .more-info-cta, .flipper-container a, #main-atf-cta").click(function (){
var scrollmeto = $(this).attr("href");
$('html, body').animate({
scrollTop: $(scrollmeto).offset().top - window.scrollovershoot
}, 1000);
return false;
});
当您使用var
时,您正在功能范围内定义变量。在函数之前定义它,使其成为可以被其他函数访问的全局。
// In the browser, `window` is a global object referring to the browser object module.
// More info: http://www.w3schools.com/js/js_window.asp.
var myGlobalVar;
function f() {
myGlobalVar = 'something';
window.myVar = 'something else';
var myLocalVar = 'some other things';
}
function g() {
console.log(myGlobalVar); // this works
console.log(window.myVar); // this also works
console.log(myLocalVar); // this does NOT work
}
f();
g();