Javascript 如何等待一段时间,然后更改变量?
我有一个使用jquery的小代码,我想等待300毫秒,然后更改一个变量。我尝试设置超时,但它不起作用,它只是使变量立即发生更改Javascript 如何等待一段时间,然后更改变量?,javascript,jquery,Javascript,Jquery,我有一个使用jquery的小代码,我想等待300毫秒,然后更改一个变量。我尝试设置超时,但它不起作用,它只是使变量立即发生更改 setTimeout(animationWait = 0, 300); (我在文档前面全局定义了animationWait)基本上,我要做的是等待一次单击结束,然后再进行另一次单击。所以我想我应该设置一个变量,然后等待300毫秒 $('#up-arrow').live('click', function(e) { if(animationWait ==
setTimeout(animationWait = 0, 300);
(我在文档前面全局定义了animationWait)基本上,我要做的是等待一次单击结束,然后再进行另一次单击。所以我想我应该设置一个变量,然后等待300毫秒
$('#up-arrow').live('click', function(e) {
if(animationWait == 0) {
animationWait = 1;
.... /* Code */
}
}
因此,我需要在延迟运行代码后将animationWait再次更改为0。我尝试了很多东西,但仍然不起作用,有什么想法吗?您使用setTimeout的方式不太正确。必须向其传递函数名或匿名函数
//anonymous function
setTimeout( function() { animationWait = 0 }, 300);
//or give it a function name
function change() { animationWait = 0; }
setTimeout(change, 300);
您使用setTimeout的方式不太正确。必须向其传递函数名或匿名函数
//anonymous function
setTimeout( function() { animationWait = 0 }, 300);
//or give it a function name
function change() { animationWait = 0; }
setTimeout(change, 300);
传递的参数应该是求值语句。对我来说,这很好:
var animationWait = -1; //Initially set the value to -1
alert(animationWait); //alert to see the value
setTimeout("animationWait = 0", 300); //Setting the value to 0
setTimeout("alert(animationWait)", 400); //Alert after 400 ms
传递的参数应该是求值语句。对我来说,这很好:
var animationWait = -1; //Initially set the value to -1
alert(animationWait); //alert to see the value
setTimeout("animationWait = 0", 300); //Setting the value to 0
setTimeout("alert(animationWait)", 400); //Alert after 400 ms
您是否尝试过使用jQuery函数 标准用例如下所示:
$('item').delay(300).delayedEffectFunction();
$("#someelement").animate({someproperty:"somevalue"},
300);
其中,
delayedEffectFunction()
是您想要延迟的虚构函数。您尝试过使用jQuery函数吗
标准用例如下所示:
$('item').delay(300).delayedEffectFunction();
$("#someelement").animate({someproperty:"somevalue"},
300);
其中,
delayedEffectFunction()
是您想要延迟的虚构函数。问题的答案是,setTimeout()
希望第一个参数是函数引用—在别处声明的函数名或匿名函数。(或者一个字符串,但出于几个原因,使用字符串几乎总是错误的解决方案。)您的原样代码只是执行表达式animationWait=0
,并将该表达式的结果(0)传递给setTimeout()
因此,要通过setTimeout()
执行单行代码,我建议将其包装在匿名函数中,并将该函数传递给setTimeout()
:
但是,如果您使用jQuery制作动画,则其动画方法允许您在动画结束时传递要执行的回调函数,因此您可以在那里执行此类处理,而不是单独设置自己的超时。例如,如果动画是这样的:
$('item').delay(300).delayedEffectFunction();
$("#someelement").animate({someproperty:"somevalue"},
300);
然后,您可以添加一个回调函数,该函数将在该动画完成后调用:
$("#someelement").animate(({someproperty:"somevalue"},
300,
function(){ animationWait = 0; });
在我看来,这比单独的setTimeout()
调用更简洁,但也更易于维护,因为只需在一个位置指定持续时间,而不必将自己的超时同步到动画
类似的语法也适用于其他jQuery方法,如
.fadeIn()
,.hide()
,等等。有关更多信息和示例,请参阅。您所问问题的答案是设置超时()
要求第一个参数是函数引用—在别处声明的函数名或匿名函数。(或者一个字符串,但出于几个原因,使用字符串几乎总是错误的解决方案。)您的原样代码只是执行表达式animationWait=0
,并将该表达式的结果(0)传递给setTimeout()
因此,要通过setTimeout()
执行单行代码,我建议将其包装在匿名函数中,并将该函数传递给setTimeout()
:
但是,如果您使用jQuery制作动画,则其动画方法允许您在动画结束时传递要执行的回调函数,因此您可以在那里执行此类处理,而不是单独设置自己的超时。例如,如果动画是这样的:
$('item').delay(300).delayedEffectFunction();
$("#someelement").animate({someproperty:"somevalue"},
300);
然后,您可以添加一个回调函数,该函数将在该动画完成后调用:
$("#someelement").animate(({someproperty:"somevalue"},
300,
function(){ animationWait = 0; });
在我看来,这比单独的setTimeout()
调用更简洁,但也更易于维护,因为只需在一个位置指定持续时间,而不必将自己的超时同步到动画
类似的语法也适用于其他jQuery方法,如
.fadeIn()
,.hide()
,等等。有关更多信息和示例,请参阅@高兴-你为什么不发帖子作为回答?如果你这样做,我一定会投赞成票@mrtsherman我很懒,不在乎信誉点),但无论如何还是要感谢你)setTimeout(function(){animationWait=0;},300)@高兴-你为什么不发帖子作为回答?如果你这样做,我一定会投赞成票@Herman先生,我很懒,不在乎声誉积分),但无论如何,谢谢你)…或者传递了一个字符串。(我提到它只是为了完整性,因为它几乎总是错误的选择。)哦,上帝。我真不敢相信我没有加入一个函数。我真傻!谢谢……或者传了一条线。(我提到它只是为了完整性,因为它几乎总是错误的选择。)哦,上帝。我真不敢相信我没有加入一个函数。我真傻!谢谢