变量i
,从0
到9
的变化值不断随机变化;仅在A
200毫秒时触发函数i==1
。想知道是否有任何功能可以解决这个问题?
答案 0 :(得分:2)
您需要使用setTimeout
[MDN] 来监控变量的值。我将间隔设置为200ms,并在变量为目标值时设置标志。如果变量仍然是下一个时间间隔的目标值,请执行您的函数。
var i = 0;
function A() {
}
$(function() {
var targetFlag = false,
targetVal = 1,
triggerA = function() {
if (i == targetVal) {
if (targetFlag) {
A();
} else {
targetFlag = true;
}
} else {
targetFlag = false;
}
setTimeout(triggerA, 200);
};
triggerA();
});
答案 1 :(得分:1)
我还没有对它进行过测试,但是这条线上的某些东西应该适用于你想要做的事情:
//called when i == 1
function setTrigger( triggerCallback, testCondition, time ) {
var _triggerIfTrue = function () {
trigger( triggerCallback, testCondition, time );
if(testCondition()) {
triggerCallback();
}
};
return setTimeout( _triggerIfTrue, time );
}
//called when i != 1
function removeTrigger( triggerId ) {
clearTimeout(triggerId);
}
然后您可以这样使用它:
function callBack() {
//do something
}
function testCondition() {
//if i == 1, return true
//else return false
}
var i, triggerId;
function updateValue(newI) {
i = newI;
if( i == 1 )
triggerId = setTrigger(callBack, testCondition, 200);
else
removeTrigger(triggerId);
}
答案 2 :(得分:1)
以下呼叫A()
仅在i
持续值为200且持续200毫秒时才会调用{。}}。
更新您的代码,以便它不会直接更改i
变量。而是创建一个setI()
函数。在该函数中,如果新值不是1,则清除任何先前的timeOut。如果值为1并且还没有超时,则设置一个新值(我假设连续多次将其设置为1不会重置超时)。大致像这样:
var i,
timerID;
function setI(val){
i = val;
if (val != 1 && timerID != null) {
clearTimeout(timerID);
timerID = null;
}
if (val === 1 && timerID === null) {
timerID = setTimeout(function() {
timerID = null;
A();
}, 200);
}
}