【发布时间】:2014-04-15 00:04:29
【问题描述】:
我一直对此感到困惑,我什至不确定这是否可能,但无论如何我都去了。
如果我有一个函数可以增加存储在变量中的值,我如何在函数之外获取变量?
例如,这不是很好的代码,但我只是在玩。
function scrollVal() {
var pos = 0;
$(document).scroll(function() {
pos = $(document).scrollTop();
return pos;
});
}
var scrollPos = scrollVal();
console.log(scrollPos);
在这样的事情失败后我尝试了上述方法
var pos = 0;
$(document).scroll(function() {
pos = $(document).scrollTop();
});
console.log(pos);
我不明白如何神奇地更新变量。不过必须有办法。我正在尝试使用该变量来操作元素。例
var geometry = new FSS.Plane(1600, 835, pos, 15);
所以我的问题基本上是如何在函数内动态更改一个数字,然后在函数外使用它,以便我可以操纵具有变化值的元素?
编辑提醒:我这个问题措辞不当,我的意思是它失败了,我无法在函数范围之外获得函数范围内的值。当滚动发生在实例中时,我想传递增量值。
想象您在页面上滚动,当您滚动时,某些东西会增长,或者颜色会发生变化。我认为这应该很容易,这让我听起来像个菜鸟,但我从来没有这样做过,我不确定这里适用什么规则,我理解为什么变量不更新,但我不知道解决方案。
也许无法更新实例中的值,但首先我需要获取该变量以实时呈现适当的数字,然后我才能找到。
一个很好的基本示例是将变量附加到一个元素并观察该数字随着页面的滚动而增长。我以前见过这个,所以我知道这是可能的,如果你能想到的话,这就是我喜欢代码的地方,很可能它是可能的,但是这个解决方案不是直截了当的,有一个警告!!! :)
如果我做类似的事情,这可能会成为可能
var window.pos = 0;
$(document).scroll(function() {
pos = $(document).scrollTop();
$('.something').html(pos);
});
显然,这是通过在函数内部实现的,但由于我需要将它传递给一个实例,我不想一遍又一遍地执行它..
【问题讨论】:
-
你的第二个,在回调应该起作用之前声明
var pos。但是您在更改它之前,在定义它之后立即通过console.log()检查该值。如果将console.log(pos)放在scroll()回调中,您将看到更新后的值。同样,如果您在滚动后从浏览器控制台console.log(pos),则该值应该已更改。 -
好的,谢谢,这是有道理的,我想我到处都是。让我尝试测试变量的主要原因是它没有在实例
var geometry = new FSS.Plane(1600, 835, pos, 15);中工作,所以我尝试使用控制台记录变量以查看它是否在递增,但实际上并没有。所以我认为这就是为什么它不能在实例中工作 -
对不起,我想我们在这里沟通有误。我将承担大部分责任,因为我的问题措辞不佳。我可能会重新打开一个新的。我正在尝试将变量传递给构造函数,以便当我滚动实例中的元素(平面着色器)时,可以在页面滚动时实时操作。
-
所以变量会随着页面滚动而递增,从 0 开始,然后 (0,1,2,3,4,5,6,7,8) 向上而不调用点击函数手动更新它。我让它看起来像是一个范围问题,显然不是上面的问题,但事实并非如此。这是一个实时获取价值的问题,我应该在函数之外说
-
这完全是关于范围(变量的可用性),还是传递给
FSS.plane构造函数的整数实际上是按值传递的问题,因为它是 JavaScript 中的整数?另外,我不明白“调用点击函数”是什么意思(在上面您最近的评论中):如果您有某种更新FSS.plane实例的方法,请在您的scroll事件处理程序中使用它,其中它将以与在click事件处理程序中相同的方式处理。
标签: javascript variables