我遇到这样的情况:
talenti = $(".talenti");
filtra = $(".filtra");
wrapNavHeight = $("#wrapNav").outerHeight(true);
filtra.click(function(e) {
e.preventDefault();
$(".nasco").hide();
$("#sliding-navigation").delay(delay).show();
delay += 500;
talenti.removeClass('opened');
filtra.addClass('opened');
filtra.attr('id',"focF");
talenti.attr('id',"");
if (filtra.hasClass("opened")) {
$("#wrapNav").slideToggle("100", "linear", function(){
alert(wrapNavHeight);
$("#container").animate({"height": "+=wrapNavHeight"}, 100,function(){
$(".box").animate({"top": "+=wrapNavHeight"});
});
});
}
});
我正在尝试获取wrapNavHeight但是警告(wrapNavHeight);输出null;然后无法将该值分配给下一个动画线
任何?
答案 0 :(得分:2)
是不是只是在不可见的情况下为outerHeight
赋值变量?我认为您需要在切换过渡后重新评估outerHeight
。取代
alert(wrapNavHeight);
带
alert($("#wrapNav").outerHeight(true));
看看那是否更好?
答案 1 :(得分:0)
没有其他人真正解释过为什么会这样。这就是原因:
取决于:
在JavaScript中,"全球"引用实际上适用于当前this
对象(或者#34; true"全局对象(Web浏览器中为window
),如果不在函数内)
因此,如果我在上面指出的2个函数的this
个对象不同,那么你就会得到你观察到的情况。
在浏览器中,默认的this
对象通常为window
,但在运行该函数时可以更改此对象,例如将其他参数传递给apply
或通过调用作为一种方法的功能。
自从我认真使用jQuery以来已经过去了一年,但如果我没记错,jQuery事件处理程序通常会将this
重新绑定到与事件相关的有用事物上(使用apply - 你也可以这样做)。
因此,假设外部函数this
尚未绑定到window
以外的任何特殊内容,只需将wrapNavHeight
替换为window.wrapNavHeight
in wrapNavHeight
内在的功能,以达到你想要的效果。
(实际上,我不会这样做,但是,作为一种风格问题。只需在外部函数中声明var
为{{1}},然后你就可以了。我会得到词汇范围。)
答案 2 :(得分:-1)