setInterval和clearInterval在同一个函数中
setInterval and clearInterval within same function
我有这个message();
函数:
function message(kind, text){
if(fadeOutDelay != undefined){
clearInterval(fadeOutDelay);
}
$("#message").show();
$("#message").attr('class',kind);
$('#message').text(text);
var fadeOutDelay = setInterval(function(){
$("#message").fadeOut(2000);
},10000);
}
问题是,我试图清除间隔时,该功能是重新运行,以防止褪色的最新消息。我想继续使消息发生的能力,如果他们是10秒内彼此褪色不发生。基本上,如果在运行此函数时发生setInterval
,我想取消它。
fadeOutDelay
不在其他函数调用的作用域中。您可以使用全局变量:
var fadeOutDelay;
function message(kind, text){
if(fadeOutDelay != undefined){
clearInterval(fadeOutDelay);
}
$("#message").show();
$("#message").attr('class',kind);
$('#message').text(text);
fadeOutDelay = setInterval(function(){
$("#message").fadeOut(2000);
},10000);
}
如果我正确理解了你的问题,我认为你只需要设置你的fadeOutDelay
var全局
var fadeOutDelay; //global var.
function message(kind, text){
if(fadeOutDelay != undefined){
clearInterval(fadeOutDelay);
}
$("#message").show();
$("#message").attr('class',kind);
$('#message').text(text);
fadeOutDelay = setInterval(function(){
$("#message").fadeOut(2000);
},10000);
}
试试这个
var fadeOutDelay = null;
function message(kind, text){
if(fadeOutDelay){
clearInterval(fadeOutDelay);
fadeOutDelay = null;
}
$("#message").show();
$("#message").attr('class',kind);
$('#message').text(text);
fadeOutDelay = setInterval(function(){
$("#message").fadeOut(2000);
},10000);
}
fadeOutDelay
变量需要在这个函数的作用域之外声明:
var fadeOutDelay = null;
function message(kind, text){
if(fadeOutDelay) {
clearInterval(fadeOutDelay);
}
$("#message").show();
$("#message").attr('class',kind);
$('#message').text(text);
fadeOutDelay = setInterval(
function() { $("#message").fadeOut(2000); },
10000
);
}
这里有一种不使用全局变量的方法。
并且,我认为您希望使用setTimeout而不是setInterval,因为您只希望计时器为每个显示的消息触发一次。
我还对消息对象的初始操作进行了重新排序,以便在显示之前设置数据和类,并将jQuery对象保存在一个局部变量中,而不是一遍又一遍地运行选择器。
function message(kind, text){
var m = $('#message');
m.text(text);
m.attr('class', kind);
m.show();
var timer = m.data("timer"); // get previous timer value
if (timer) {
clearTimeout(timer); // clear timer, if still running
}
timer = setTimeout(function() {
m.fadeOut(2000);
m.data("timer", null); // clear stored timer
},10000);
m.data("timer", timer); // store timer as data on the object
}
相关文章:
- 在同一个javascript事件处理程序中调用不同的函数
- 当多个 JS 事件调用同一个函数时,如何处理它们
- 如何用两种不同的方式调用同一个函数
- JS:我如何访问一个函数内的变量值,而另一个函数内部的变量值,并且两个函数属于同一个对象
- JavaScript 如何将函数结果与数组中的值一起传递到同一个函数中
- 从同一个变量中调用函数
- 有更好的方法吗?在多个函数中重用同一个循环
- 将同一个jquery文件中的几个js函数以我选择的不同间隔加载到几个html页面中
- 从同一个文件和不同的文件调用nodejs函数
- 在同一个按钮上调用多个函数对我来说不起作用(ajax)
- 错误:在同一个angular Js函数中使用两个Http请求调用时,$digest已经在进行中
- 你能从同一个UserControls Javascript调用一个UserControl服务器函数吗
- 我可以在change()函数中为同一个$('element.class')运行嵌套的$('!ele
- 如何使变量在同一个重复函数中交替取值
- 使用ajax从同一个javascript函数多次调用,对象在函数体和ajax成功回调之间的参数不相同
- 如何在同一个脚本中从一个函数到另一个函数进行javascript调用
- 在新窗口中打开同一个AngularJS应用程序,在父窗口中调用函数
- 同一个函数参数能接受不同的数据类型吗?
- 我的一个变量是在initMap中设置的,但是当我在脚本中调用另一个函数时,同一个变量突然没有定义
- 如何在同一个函数中动画最近创建的DOM元素?